Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Ilo
3 / 3 / 0
Регистрация: 18.12.2013
Сообщений: 30
1

Как найти заданный элемент (типа char) в массиве структур?

04.01.2014, 21:15. Просмотров 576. Ответов 7
Метки нет (Все метки)

Есть массив структур в виде адресной книги с 10 записями с уже введёнными данными (фамилия, имя, улица, номер дома и номер квартиры).
Как найти заданный элемент (типа char) в массиве структур по фамилии (последняя операция Find)?
Операции сохранения в файл, чтения из файла и сортировки массива структур я сумел написать, а с последней операцией (поиска по фамилии в массиве структур) у меня проблема.
Код прилагается.

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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// control.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <string.h>
 
using namespace std;
const int NotUsed = system( "color F0" );
 
struct student
{
    char lastname[30];
    char firstname[30];
    char street[30];
             int house;
    int apartment;
}mas;
 
int _tmain(int argc, _TCHAR* argv[])
{
  int option = 0;
  while(option != -1) {
  cout<<endl<<"1 - Make 2 - Print 3 - Save 4 - Load 5 - Sort 6 - Find 0 - Exit"<<endl;
  cout<<"Input Num ";
  cin >> option;
  switch(option) {
           case 1:
   cout <<endl<<"Make"<<endl;
   int i;
   struct student mas[10];
   strcpy_s(mas[0].lastname, "Anisimov");
   strcpy_s(mas[0].firstname, "Anton");
   strcpy_s(mas[0].street, "Budanuva"); 
   mas[0].house=10;
   mas[0].apartment=3;
   strcpy_s(mas[1].lastname, "Bunin");
   strcpy_s(mas[1].firstname, "Pavel");
   strcpy_s(mas[1].street, "Oboronu"); 
   mas[1].house=20;
   mas[1].apartment=5;
   strcpy_s(mas[2].lastname, "Cuprin");
   strcpy_s(mas[2].firstname, "Vasiliy");
   strcpy_s(mas[2].street, "Lesnaay"); 
   mas[2].house=15;
   mas[2].apartment=8;
   strcpy_s(mas[3].lastname, "Dostoevskiy");
   strcpy_s(mas[3].firstname, "Igor");
   strcpy_s(mas[3].street, "Globova"); 
   mas[3].house=1;
   mas[3].apartment=15;
   strcpy_s(mas[4].lastname, "Esenin");
   strcpy_s(mas[4].firstname, "Evgeniy");
   strcpy_s(mas[4].street, "Respublikanskay"); 
   mas[4].house=56;
   mas[4].apartment=5;
   strcpy_s(mas[5].lastname, "Bach");
   strcpy_s(mas[5].firstname, "Anton");
   strcpy_s(mas[5].street, "Chmelnaay"); 
   mas[5].house=11;
   mas[5].apartment=88;
   strcpy_s(mas[6].lastname, "Pushkin");
   strcpy_s(mas[6].firstname, "Aleksandr");
   strcpy_s(mas[6].street, "Rechnaay"); 
   mas[6].house=132;
   mas[6].apartment=33;
   strcpy_s(mas[7].lastname, "Nosov");
   strcpy_s(mas[7].firstname, "Nikolay");
   strcpy_s(mas[7].street, "Treugolnaay"); 
   mas[7].house=16;
   mas[7].apartment=81;
   strcpy_s(mas[8].lastname, "Ostrovskiy");
   strcpy_s(mas[8].firstname, "Igor");
   strcpy_s(mas[8].street, "Komarskaay"); 
   mas[8].house=19;
   mas[8].apartment=8;
   strcpy_s(mas[9].lastname, "Asprin");
   strcpy_s(mas[9].firstname, "Robert");
   strcpy_s(mas[9].street, "Snezhnaay"); 
   mas[9].house=6;
   mas[9].apartment=24;
   for (i=0;i<10;i++)
   cout<<""<<mas[i].lastname<<" "<<mas[i].firstname<<" st. "<<mas[i].street<<" "<<mas[i].house<<", ap."<<mas[i].apartment<<endl;      
           break;
           case 2:
   cout <<endl<<"Print"<<endl;
   for(i=0;i<10;i++)
   cout<<""<<mas[i].lastname<<" "<<mas[i].firstname<<" st. "<<mas[i].street<<" "<<mas[i].house<<", ap."<<mas[i].apartment<<endl;
           break;
           case 3:
   cout <<endl<<"Save"<<endl;
   {
    ofstream outfile;
    outfile.open("outfile.txt");
    for (i=0;i<10;++i)
    outfile << mas[i].lastname << " " << mas[i].firstname << " st. " << mas[i].street << " " << mas[i].house << ", ap. " << mas[i].apartment <<endl;
    outfile.close();
   }
           break;
           case 4:
   cout <<endl<<"Load"<<endl;
   {char buff[100]; 
   ifstream fin("outfile.txt"); 
   for (i=0;i<10;i++)
   {
    fin.getline(buff, 100);
    cout << buff<<endl;
   }
   fin.close();
   }
           break;
           case 5:
   cout <<endl<<"Sort"<<endl;
   int j;
   char mas2[30];
   char mas3[30];
   char mas4[30];
   int mas5;
   int mas6;
   for(i=0;i<10-1;i++)
        for(j=i+1;j<10;j++)
            if(strcmp(mas[i].lastname,mas[j].lastname)>0)
            {strcpy_s(mas2,mas[i].lastname);
     strcpy_s(mas3,mas[i].firstname);
     strcpy_s(mas4,mas[i].street);
     swap(mas[i].house,mas5);
     swap(mas[i].apartment,mas6);
    
     strcpy_s(mas[i].lastname,mas[j].lastname);
     strcpy_s(mas[i].firstname,mas[j].firstname);
     strcpy_s(mas[i].street,mas[j].street);
     swap(mas[i].house,mas[j].house);
     swap(mas[i].apartment,mas[j].apartment);
 
              strcpy_s(mas[j].lastname,mas2);
     strcpy_s(mas[j].firstname,mas3);
     strcpy_s(mas[j].street,mas4);
     swap(mas[j].house,mas5);
     swap(mas[j].apartment,mas6);
             }
    for(i=0;i<10;i++)
    cout<<mas[i].lastname<<" "<<mas[i].firstname<<" st. "<<mas[i].street<<" "<<mas[i].house<<", ap."<<mas[i].apartment<<endl;
           break;
           case 6:
   cout <<endl<<"Find"<<endl;
 
           break;
           case 0: return 0;
           default:
  cout <<endl<<"Error"<<endl;
                             }
                          }
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2014, 21:15
Ответы с готовыми решениями:

Интерполирующий поиск в массиве структур типа char
Добрый вечер, дано задание сделать Интерполирующий поиск в массиве структур по...

Работа с битами: как просмотреть и изменить заданный бит в переменной типа char?
Есть переменная типа char, как посмотреть в нем биты и изменять их?

Как найти в массиве минимальный элемент типа int?
У нас есть массив int a в который мы вводим наши цифры, как найти минимальный...

Найти количество чисел в массиве типа char
задание полностью стоит следующее: в массиве типа char вывести только те слова,...

как поменять слова местами в массиве типа char?
нужно поменять введенный текс в массиве типа char так, чтобы менялись местами...

7
newb_programmer
237 / 237 / 113
Регистрация: 03.09.2011
Сообщений: 558
04.01.2014, 21:35 2
Ilo, ну вот так поиск происходит по фамилиям, sample-это то что вы ищете
C++
1
2
3
4
5
6
7
for (int i=0;i<size;i++)
    if (!strcmp(sample,mas[i].lastname))
        cout<<mas[i].lastname<<" "
        <<mas[i].firstname<<" st. "
        <<mas[i].street<<" "
        <<mas[i].house<<", ap."
        <<mas[i].apartment<<endl;
0
Ilo
3 / 3 / 0
Регистрация: 18.12.2013
Сообщений: 30
05.01.2014, 00:20  [ТС] 3
Увы, не работает, но спасибо за попытку.
0
newb_programmer
237 / 237 / 113
Регистрация: 03.09.2011
Сообщений: 558
05.01.2014, 00:43 4
Ilo, вообще то должно работать. я в ваш код добавил поиск, но у меня заходит в кейс 6 и проскакивает ввод строки...хз почему=) теоретически должно работать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 case 6: 
 cout <<endl<<"Enter line"<<endl;
 char s[100];
 cin.getline(s,100,'\n');
 for (int i=0;i<10;i++)
    if (!strcmp(s,mas[i].lastname))
        cout<<mas[i].lastname<<" "
        <<mas[i].firstname<<" st. "
        <<mas[i].street<<" "
        <<mas[i].house<<", ap."
        <<mas[i].apartment<<endl;
         
         cout <<endl<<"Find."<<endl;
 break;
1
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.01.2014, 04:03 5
Цитата Сообщение от newb_programmer Посмотреть сообщение
но у меня заходит в кейс 6 и проскакивает ввод строки...хз почему=)
C++
1
(cin >> option).get();
1
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.01.2014, 04:20 6
Поиск newb_programmer работает.
0
Миниатюры
Как найти заданный элемент (типа char) в массиве структур?  
Ilo
3 / 3 / 0
Регистрация: 18.12.2013
Сообщений: 30
05.01.2014, 20:48  [ТС] 7
Я заменил
C++
1
cin.getline(s,100,'\n');
на
C++
1
cin>>s;
и программа перестала пропускать строку в case.
C++
1
2
3
4
5
6
7
8
9
case 6:
 cout <<endl<<"Find";
 cout <<endl<<"Enter line"<<endl;
 char s[100];
 cin>>s;
 for (int i=0;i<10;i++)
    if (!strcmp(s,mas[i].lastname))
 cout<<"Find: "<<mas[i].lastname<<" "<<mas[i].firstname<<" st. "<<mas[i].street<<" "<<mas[i].house<<", ap."<<mas[i].apartment<<endl;     
 break;
0
Ilo
3 / 3 / 0
Регистрация: 18.12.2013
Сообщений: 30
05.01.2014, 21:16  [ТС] 8
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
(cin >> option).get();
Попробовал. Ваш вариант тоже работает.
C++
1
2
3
4
5
6
7
8
9
case 6:
 cout <<endl<<"Find";
 cout <<endl<<"Enter line"<<endl;
 char s[100];
 (cin >> s).get();
 for (int i=0;i<10;i++)
    if (!strcmp(s,mas[i].lastname))
 cout<<"Find: "<<mas[i].lastname<<" "<<mas[i].firstname<<" st. "<<mas[i].street<<" "<<mas[i].house<<", ap."<<mas[i].apartment<<endl;     
 break;
Спасибо.
0
05.01.2014, 21:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2014, 21:16

Как полю класса типа char* присвоить значение типа *char
Проблема в строчке 46 (не пинайте сильно за формат кода и за говнокод) ...

Как проинициировать в массиве структур (создонном ранее) каждый элемент
1.Почему нельзя проиницировать каждую структуру в массиве созданном раньше:...

Вывести на консоль имена сотрудников, возраст которых превышает заданный (поиск в массиве структур)
Ввести в компьютер информацию о сотрудниках отдела: фамилия, имя, возраст....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru