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

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

Войти
Регистрация
Восстановить пароль
 
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
#1

Массивы строк. По имени абонента найти его номер - C++

03.02.2014, 01:04. Просмотров 479. Ответов 13
Метки нет (Все метки)

Данная программа - справочник, вводим имя (например Mery) и получаем номер телефона.

Пример из книги:

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
#include <cstring>
using namespace std;
 
int main(){
 
    int i;
    char str[80];
    char numbers[10][80] ={
    "Tom", "555-3322",
    "Mery","555-8976",
    "Jon","555-1037",
    "Reychel", "555-1400",
    "Sheron", "555-8873"
    };
    
    cout << "Name: ";
    cin >> str;
    
    for (i=0;i<10;i+=2)
     if(!strcmp(str,numbers[i])){
        cout << "Phone " << numbers[i+1]<<endl;
        break;
     }
    if(i==10) cout << "Not found"<<endl;
 
return 0; 
}
Мой вопрос:

Как можно сравнивать строки
C++
1
!strcmp(str,numbers[i])
, не понимаю, например вводим Mery и это имя должно сверится с целой строкой
C++
1
numbers[i]
в которой содержится Tom5553322Mery555-8976 и т.д
Ведь при таком обращении
C++
1
numbers[i]
это уже не двумерный массив, а просто строка символов в которой numbers[0] = 'T', numbers[1]='O'.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2014, 01:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массивы строк. По имени абонента найти его номер (C++):

При вводе имени абонента или его номера выводить его фамилию, номер телефона и адрес. - C++
Создать телефонный справочник на 10 имен, адресов и номеров. При вводе имени абонента или его номера выводить его фамилию, номер телефона и...

Массивы (вычислить сумму элементов, найти номер первой из строк...) - C++
Написать программу работы с двумерным вещественным массивом из 7 строк и 5 столбцов для решения задач: 1) вычислить сумму элементов в...

Двумерные массивы (Определить Количество строк, номер столбца) - C++
Дана целочисленная прямоугольная матрица.Определить: 1)Количество строк,содержащих хотя бы один нулевой элемент 2)номер столбца,в...

Найти ищет по имени и адресу номер телефона. Ссылка на неразрешенный внешний символ - C++
Делаю прогу которая ищет по имени и адресу номер телефона, но возникла ошибка. Никак не могу решить эту проблему. Ошибка 2 error...

Определить максимальный элемент матрицы А, номер его строки и номер его столбца - C++
Помогите написать программу)Не могу сформировать одномерный массив из строки(( Дана матрица А (5*5) нецелых элементов. -3.8 ...

Задача на массивы. Найти номер наименьшего положительного числа последовательности - C++
Дано натуральное числоn(n\leq 100).И действительные числа{a}_{1},{a}_{2}...{a}_{n} Найти номер наименьшего положительного числа в заданной...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Bretbas
191 / 50 / 7
Регистрация: 05.08.2013
Сообщений: 823
Завершенные тесты: 1
03.02.2014, 01:19 #2
советую если используешь библиотеку <string> то использовать класс string, и рассматривать строку как объект этого класса.Тем более там перегружен оператор сравнения ==
mf909
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 30
03.02.2014, 01:24 #3
Двумерный массив - это массив массивов.
numbers[i][j] - это символ, numbers[i] - строка, а numbers - массив из 10 строк, нулевая из которых равна "Tom", первая равна "555-3322" и т.д.

Цитата Сообщение от PriZrаK Посмотреть сообщение
в которой содержится Tom5553322Mery555-8976
Первые три символа действительно будут "Tom", но потом будут идти до символа с номером 79 включительно пробелы, поскольку вторая размерность массива равна 80. И только символ 80 будет равен '5'.
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
03.02.2014, 02:01  [ТС] #4
Цитата Сообщение от mf909 Посмотреть сообщение
Двумерный массив - это массив массивов.
numbers[i][j] - это символ, numbers[i] - строка, а numbers - массив из 10 строк, нулевая из которых равна "Tom", первая равна "555-3322" и т.д.


Первые три символа действительно будут "Tom", но потом будут идти до символа с номером 79 включительно пробелы, поскольку вторая размерность массива равна 80. И только символ 80 будет равен '5'.
А что значит следующее:

C++
1
2
3
4
5
6
7
    char numbers[10][80] ={
    "Tom", "555-3322",
    "Mery","555-8976",
    "Jon","555-1037",
    "Reychel", "555-1400",
    "Sheron", "555-8873"
    };
как можно проще записать (типа number[0][0] = и т.д)
Fene4ka_
89 / 89 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
03.02.2014, 02:14 #5
PriZrаK, используйте структуру для хранения данных, так будет гораздо проще искать и выводить необходимые данные, и если вы не знаете, что означает:
C++
1
2
3
4
5
6
7
char numbers[10][80] ={
    "Tom", "555-3322",
    "Mery","555-8976",
    "Jon","555-1037",
    "Reychel", "555-1400",
    "Sheron", "555-8873"
    };
может немножко нада подучить мат.часть ?
mf909
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 30
03.02.2014, 15:20 #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от PriZrаK Посмотреть сообщение
А что значит следующее:
Эта инструкция создает массив numbers, состоящий из 10 строк, каждая строка длиной 80 символов, при этом элемент массива с индексом 0 является строкой "Tom", элемент с индексом 1 - строкой "555-3322" и т.д.
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
03.02.2014, 16:40  [ТС] #7
Цитата Сообщение от mf909 Посмотреть сообщение
Эта инструкция создает массив numbers, состоящий из 10 строк, каждая строка длиной 80 символов, при этом элемент массива с индексом 0 является строкой "Tom", элемент с индексом 1 - строкой "555-3322" и т.д.
Последний вопрос, в чем отличие инициализации:
itn sqrs[10][2] = {1,1,2,4,3,9};
int sqrs[10][2] = {{1,1},{2,4},{3,9}};
mf909
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 30
03.02.2014, 18:56 #8
Цитата Сообщение от PriZrаK Посмотреть сообщение
itn sqrs[10][2] = {1,1,2,4,3,9};
int sqrs[10][2] = {{1,1},{2,4},{3,9}};
Результат будет в обоих случаях один и тот же.
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
03.02.2014, 21:47  [ТС] #9
Цитата Сообщение от mf909 Посмотреть сообщение
Результат будет в обоих случаях один и тот же.
а если поменять размерность массива 10 на 3 то ничего не измениться?
mf909
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 30
03.02.2014, 22:13 #10
Цитата Сообщение от PriZrаK Посмотреть сообщение
а если поменять размерность массива 10 на 3 то ничего не измениться?
Не изменится.
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
03.02.2014, 22:35 #11
PriZrаK, может и не туда лезу, но все же, как вариант на будущее:
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
#include <iostream>
#include <string>
#include <map>
using namespace std;
 
int main()
{
    string str;
    map<string, string> numbers;
 
    numbers["Tom"] = "555-3322";
    numbers["Mery"] = "555-8976";
 
    cout << "Name: ";
    cin >> str;
    
    cout << "Phone: ";
    if(numbers.find(str)!=numbers.end()) 
        cout << numbers[str];
    else
        cout << "not found";
 
    return 0;
}
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
03.02.2014, 22:38 #12
можно с помощью хэш-таблицы сделать
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
03.02.2014, 23:07  [ТС] #13
Цитата Сообщение от mf909 Посмотреть сообщение
Не изменится.
Все изменилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main(){
    int sqrs[10][3] = {1,1,2,4,3,9};
    int sqr[10][3] = {{1,1},{2,4},{3,9}};
    
    for (int i=0; i<10;i++)
        for (int j=0;j<3;j++)
         cout <<"sqrs ["<<i<<"]"<<"["<<j<<"]="<<sqrs[i][j]<<endl;
         
         cout <<endl<<endl;
         for (int i=0; i<10;i++)
        for (int j=0;j<3;j++)
         cout <<"sqrs ["<<i<<"]"<<"["<<j<<"]="<<sqr[i][j]<<endl;
         
         
return 0;
}
вывод посмотрите
mf909
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 30
04.02.2014, 00:04 #14
Цитата Сообщение от PriZrаK Посмотреть сообщение
а если поменять размерность массива 10 на 3 то ничего не измениться?
Я понял эту фразу как изменить первую размерность 10 на 3, чтобы массив стал
itn sqrs[3][2].
Если менять вторую размерность, то да, ситуация меняется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 00:04
Привет! Вот еще темы с ответами:

Задача на массивы. Найти номер наименьшего положительного числа последовательности - C++
Дано натуральное число n(n\leq 100).И действительные числа{a}_{1},{a}_{2}...{a}_{n} Найти номер наименьшего положительного числа в...

Найти минимальный элемент и его порядковый номер - C++
Дан массив x1,x2,...,x10. Найти минимальный элемент и его порядковый номер.

Найти максимальный элемент массива и его номер - C++
Составить программу записи в массив В номеров четных элементов массива А. Дан одномерный массив состоящий из различных целых чисел. Найти...

Найти максимальный элемент массива и его номер - C++
задан массив n элемнтов,найти max элемент массиваи его номер


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

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

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