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

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

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

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

04.01.2014, 21:15. Просмотров 444. Ответов 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) в массиве структур? (C++):

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

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

Найти количество чисел в массиве типа char - C++
задание полностью стоит следующее: в массиве типа char вывести только те слова, которые состоят из латинских букв и вывести количество...

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

Как проинициировать в массиве структур (создонном ранее) каждый элемент - C++
1.Почему нельзя проиницировать каждую структуру в массиве созданном раньше: struct CandyBar { char name; float weight; int...

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

7
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
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 / 19
Регистрация: 03.09.2011
Сообщений: 555
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
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.01.2014, 04:03 #5
Цитата Сообщение от newb_programmer Посмотреть сообщение
но у меня заходит в кейс 6 и проскакивает ввод строки...хз почему=)
C++
1
(cin >> option).get();
1
alsav22
5421 / 4816 / 442
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2014, 21:16
Привет! Вот еще темы с ответами:

Строка: Как расположить буквы в первом массиве, который типа char, в порядке убывания или возрастания частоты появления букв в тексте? - C++
Имеется два массива. Один типа char из 26 букв алфавита в алфавитном порядке, другой -- типа int из 26 элементов, в которых соответственно...

Реализовать сортировку и поиск данных в массиве структур типа School - C++
Описать структуру с именем SCHOOL, что содержит следующие поля: NAME - фамилия и имя ученика, GROUP - номер класса, SUBJECT -...

Реализовать сортировку и поиск данных в массиве структур типа School - C++
Описать структуру с именем SCHOOL, что содержит следующие поля: NAME - фамилия и имя ученика, GROUP - номер класса, SUBJECT -...

Удалить начальные пробелы в !символьном массиве (типа char) - C++
Дается символьный массив, надо удалить в нём начальные пробелы. Мне нужен хотя бы алгоритм, никак не могу правильно построить цикл... ...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
05.01.2014, 21:16
Ответ Создать тему
Опции темы

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