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

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

Восстановить пароль Регистрация
 
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
03.02.2014, 01:04     Массивы строк. По имени абонента найти его номер #1
Данная программа - справочник, вводим имя (например 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++ При вводе имени абонента или его номера выводить его фамилию, номер телефона и адрес.
C++ Определить максимальный элемент матрицы А, номер его строки и номер его столбца
C++ Найти максимальный элемент массива и его номер
Массивы (вычислить сумму элементов, найти номер первой из строк...) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bretbas
22 / 17 / 1
Регистрация: 05.08.2013
Сообщений: 468
Завершенные тесты: 1
03.02.2014, 01:19     Массивы строк. По имени абонента найти его номер #2
советую если используешь библиотеку <string> то использовать класс string, и рассматривать строку как объект этого класса.Тем более там перегружен оператор сравнения ==
mf909
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 29
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_
84 / 84 / 16
Регистрация: 24.01.2014
Сообщений: 1,142
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
Сообщений: 29
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
Сообщений: 29
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
Сообщений: 29
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;
}
вывод посмотрите
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 00:04     Массивы строк. По имени абонента найти его номер
Еще ссылки по теме:

C++ Двумерные массивы (Определить Количество строк, номер столбца)
C++ Задача на массивы. Найти номер наименьшего положительного числа последовательности
Найти ищет по имени и адресу номер телефона. Ссылка на неразрешенный внешний символ C++

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

Или воспользуйтесь поиском по форуму:
mf909
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 29
04.02.2014, 00:04     Массивы строк. По имени абонента найти его номер #14
Цитата Сообщение от PriZrаK Посмотреть сообщение
а если поменять размерность массива 10 на 3 то ничего не измениться?
Я понял эту фразу как изменить первую размерность 10 на 3, чтобы массив стал
itn sqrs[3][2].
Если менять вторую размерность, то да, ситуация меняется.
Yandex
Объявления
04.02.2014, 00:04     Массивы строк. По имени абонента найти его номер
Ответ Создать тему
Опции темы

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