Форум программистов, компьютерный форум CyberForum.ru

Удалить из массива тех абонентов, телефон которых начинается с цифры 3 - C++

Восстановить пароль Регистрация
 
kaig
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 22
13.04.2014, 18:28     Удалить из массива тех абонентов, телефон которых начинается с цифры 3 #1
Сформировать массив записей, описывающих следующую таблицу:
---------------------------------------------------------------
Фамилия ! Адрес ! N телефона
--------------------------------------------------------------

Удалить из массива тех абонентов, телефон которых начинается с цифры 3. Скорректированный массив вывести в прежней форме.
Массив записей сформировал, но не знаю как выполнение удаление абонентов, сделал таким образом: вывел всех абонентов, чей номер не начинается с цифры 3, но это неправильно, прошу помочь, заранее спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "string.h"
using namespace std;
 
struct Abonent 
{
    char fio[40];
    char address[40];
    int phone;
};
 
int first_num(int num)
{
    int res = 0;
    while (num)
    {
        res = num % 10;
        num /= 10;
    }
    return res;
}
 
 
Abonent reg_abonent(int i);
void vivod_abon(Abonent *Danye);
void svivod_abon(Abonent *Danye);
 
int main()
{
    // заполняем данными
    Abonent Danye[5] = {
        "a1","a1",1111,
        "a2","a2",2222,
        "a3","a3 ",3333
    };
 
    //вводим абонентов с клавиатуры
    for (int i = 3; i < 5; i++)
    {
        Danye[i] = reg_abonent(i);
    }
 
    vivod_abon(Danye);
    svivod_abon(Danye);
 
    _getch();
    return 0;
}
 
Abonent reg_abonent(int i)
{
    Abonent a; 
 
    char c;
    cout << endl << "Vvedite abonenta " << i+1 << " \n";
    cout << "       fio: ";
    cin.getline(a.fio, 40);
 
    cout << "   address: ";
    cin.getline(a.address, 40);
 
    cout << "     phone: ";
    cin >> a.phone;
    cin.get(c);
 
    return a;
}
 
 
 
void vivod_abon(Abonent *Danye)
{
 
 
        printf("----------------------------------------------------------------\n");
        printf("|%20s|%20s|%20s|\n","fio","address","phone");
        printf("----------------------------------------------------------------\n");
    for (int i = 0; i < 5; i++) 
    {
        Abonent *tekysh = &Danye[i];
        if (strlen(tekysh->fio) == 0) 
        { 
            continue;
        }
        printf("|%20s|%20s|%20d|\n",  tekysh->fio, tekysh->address, tekysh->phone);     
    }
        printf("----------------------------------------------------------------\n");
}
 
 
 
void svivod_abon(Abonent *Danye)
{
        cout <<"Skorrektirovannyj spisok abonentov" <<endl;
        printf("----------------------------------------------------------------\n");
        printf("|%20s|%20s|%20s|\n","fio","address","phone");
        printf("----------------------------------------------------------------\n");
            for (int i = 0; i < 5; i++)
                if (first_num(Danye[i].phone) != 3)
 
        printf("|%20s|%20s|%20d|\n",  Danye[i].fio, Danye[i].address, Danye[i].phone);
        printf("----------------------------------------------------------------\n");
}
копаю в сторону, кажется, тут я вообще ничего не понимаю
C++
1
2
3
4
5
            for (int i = 0; i < 5; i++)
                if (first_num(Danye[i].phone) == 3)
                    {
                        Danye[i] = Danye[i + 1];
                    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2014, 18:28     Удалить из массива тех абонентов, телефон которых начинается с цифры 3
Посмотрите здесь:

Удалить из массива все элементы,в записи которых все цифры различны. C++
C++ Удалить из массива все элементы,в записи которых все цифры различны.
Найти фамилии и адреса людей,чей телефон начинается с цифры 3 C++
C++ Создать два массива. Вычислить количество тех элементов каждого массива, для которых выполняется неравенство: 2<элемент массива<10
C++ Массив строк в с++. Вывести строки, в которых есть цифры. В каждой строке удалить все цифры
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kaig
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 22
23.04.2014, 16:17  [ТС]     Удалить из массива тех абонентов, телефон которых начинается с цифры 3 #2
вот еще попытка, но при выводе не удаляется последний элемент массива, кто может сказать почему?
C++
1
2
3
4
5
6
for (int i = 0; i < 5; i++)
            {
                while (first_num(Danye[i].phone)==3)
                    {
                        i++;
                    }
вывод
C++
1
2
3
4
5
6
7
----------------------------------------------------------------
|                 fio|             address|               phone|
----------------------------------------------------------------
|                   a|                   b|              243565|
|                   4|                   5|                   6|
| Vв•*Бв•©°ЁA|                 Dе#|             4321528|
----------------------------------------------------------------
pisaruk
1 / 1 / 1
Регистрация: 08.01.2013
Сообщений: 15
23.04.2014, 16:30     Удалить из массива тех абонентов, телефон которых начинается с цифры 3 #3
Например вместо массива можно использовать vector .erase(i) - удаляет элемент с итератором i
kaig
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 22
23.04.2014, 16:45  [ТС]     Удалить из массива тех абонентов, телефон которых начинается с цифры 3 #4
а без использования вектора это как-то можно осуществить? путем сдвига элементов массива?
_Ellen_
15 / 15 / 5
Регистрация: 28.11.2013
Сообщений: 50
23.04.2014, 17:00     Удалить из массива тех абонентов, телефон которых начинается с цифры 3 #5
Если память под массив выделяется не динамически, как тут, то "удалить" элементы можно обнулив их (ну, можно и сдвинуть оставшиеся, конечно).

Но особого смысла в этом нет, лучше действительно использовать вектор.
kaig
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 22
23.04.2014, 17:22  [ТС]     Удалить из массива тех абонентов, телефон которых начинается с цифры 3 #6
подскажите как осуществить вариант со сдвигом, что я делаю не так?
pisaruk
1 / 1 / 1
Регистрация: 08.01.2013
Сообщений: 15
23.04.2014, 17:42     Удалить из массива тех абонентов, телефон которых начинается с цифры 3 #7
Ну если с массивом все таки хочешь, то можешь просто, проверять на нужные тебе условия и писать в новый массив.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2014, 11:41     Удалить из массива тех абонентов, телефон которых начинается с цифры 3
Еще ссылки по теме:

Удалить из массива элементы, в записи которых все цифры различны C++
Среди всех четырехзначных цифр определить число тех, у которых все цифры различны C++
C++ Удалить из целочисленного одномерного массива все элементы, в записи которых все цифры различны

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kaig
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 22
24.04.2014, 11:41  [ТС]     Удалить из массива тех абонентов, телефон которых начинается с цифры 3 #8
пытался делать, в результате чего вообще не выполняется условие

Добавлено через 15 часов 47 минут
а примерный код можно? если просто создать массив, найти в нем все, что начинается с цифры 3, то получается, а если в своей же программе, то что-то не так, то за пределы вылезет, то ничего не удаляет
Yandex
Объявления
24.04.2014, 11:41     Удалить из массива тех абонентов, телефон которых начинается с цифры 3
Ответ Создать тему
Опции темы

Текущее время: 06:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru