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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ilo
3 / 3 / 0
Регистрация: 18.12.2013
Сообщений: 30
#1

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

04.01.2014, 21:15. Просмотров 423. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2014, 21:15     Как найти заданный элемент (типа char) в массиве структур?
Посмотрите здесь:
C++ Интерполирующий поиск в массиве структур типа char
Как найти в массиве минимальный элемент типа int? C++
C++ Найти количество чисел в массиве типа char
как поменять слова местами в массиве типа char? C++
Как проинициировать в массиве структур (создонном ранее) каждый элемент C++
Вывести на консоль имена сотрудников, возраст которых превышает заданный (поиск в массиве структур) C++
Строка: Как расположить буквы в первом массиве, который типа char, в порядке убывания или возрастания частоты появления букв в тексте? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
04.01.2014, 21:35     Как найти заданный элемент (типа char) в массиве структур? #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;
Ilo
3 / 3 / 0
Регистрация: 18.12.2013
Сообщений: 30
05.01.2014, 00:20  [ТС]     Как найти заданный элемент (типа char) в массиве структур? #3
Увы, не работает, но спасибо за попытку.
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
05.01.2014, 00:43     Как найти заданный элемент (типа char) в массиве структур? #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;
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.01.2014, 04:03     Как найти заданный элемент (типа char) в массиве структур? #5
Цитата Сообщение от newb_programmer Посмотреть сообщение
но у меня заходит в кейс 6 и проскакивает ввод строки...хз почему=)
C++
1
(cin >> option).get();
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.01.2014, 04:20     Как найти заданный элемент (типа char) в массиве структур? #6
Поиск newb_programmer работает.
Миниатюры
Как найти заданный элемент (типа char) в массиве структур?  
Ilo
3 / 3 / 0
Регистрация: 18.12.2013
Сообщений: 30
05.01.2014, 20:48  [ТС]     Как найти заданный элемент (типа char) в массиве структур? #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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2014, 21:16     Как найти заданный элемент (типа char) в массиве структур?
Еще ссылки по теме:
C++ Реализовать сортировку и поиск данных в массиве структур типа School
C++ Реализовать сортировку и поиск данных в массиве структур типа School
Удалить начальные пробелы в !символьном массиве (типа char) C++
Добавление в массив типа char * одного элемента типа char C++
Аргумент типа char (*)[1000] несовместим с параметром типа char** C++

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

Или воспользуйтесь поиском по форуму:
Ilo
3 / 3 / 0
Регистрация: 18.12.2013
Сообщений: 30
05.01.2014, 21:16  [ТС]     Как найти заданный элемент (типа char) в массиве структур? #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;
Спасибо.
Yandex
Объявления
05.01.2014, 21:16     Как найти заданный элемент (типа char) в массиве структур?
Ответ Создать тему
Опции темы

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