Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
-27 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 145
1

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

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

Author24 — интернет-сервис помощи студентам
Данная программа - справочник, вводим имя (например 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'.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2014, 01:04
Ответы с готовыми решениями:

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

По номеру квартиры абонента кабельной сети вывести на экран номер его подъезда
Написать программу, которая по заданному номеру квартиры абонента кабельной сети выводит на экран...

Опишите массив записей, содержащих фамилию абонента и номер его телефона. Запрограммируйте двоичный поиск в
Опишите массив записей, содержащих фамилию абонента и номер его телефона. Запрограммируйте двоичный...

Массивы.Найти максимальное значение и его номер
Var a:array of integer; max,k,i,n:integer; begin writeln('введите кол-во чисел'); readln(n);...

13
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
03.02.2014, 01:19 2
советую если используешь библиотеку <string> то использовать класс string, и рассматривать строку как объект этого класса.Тем более там перегружен оператор сравнения ==
0
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'.
0
-27 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 145
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] = и т.д)
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
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"
    };
может немножко нада подучить мат.часть ?
0
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 30
03.02.2014, 15:20 6
Лучший ответ Сообщение было отмечено PriZrаK как решение

Решение

Цитата Сообщение от PriZrаK Посмотреть сообщение
А что значит следующее:
Эта инструкция создает массив numbers, состоящий из 10 строк, каждая строка длиной 80 символов, при этом элемент массива с индексом 0 является строкой "Tom", элемент с индексом 1 - строкой "555-3322" и т.д.
1
-27 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 145
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}};
0
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}};
Результат будет в обоих случаях один и тот же.
1
-27 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 145
03.02.2014, 21:47  [ТС] 9
Цитата Сообщение от mf909 Посмотреть сообщение
Результат будет в обоих случаях один и тот же.
а если поменять размерность массива 10 на 3 то ничего не измениться?
0
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 30
03.02.2014, 22:13 10
Цитата Сообщение от PriZrаK Посмотреть сообщение
а если поменять размерность массива 10 на 3 то ничего не измениться?
Не изменится.
0
78 / 78 / 9
Регистрация: 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;
}
1
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
03.02.2014, 22:38 12
можно с помощью хэш-таблицы сделать
0
-27 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 145
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;
}
вывод посмотрите
0
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 30
04.02.2014, 00:04 14
Цитата Сообщение от PriZrаK Посмотреть сообщение
а если поменять размерность массива 10 на 3 то ничего не измениться?
Я понял эту фразу как изменить первую размерность 10 на 3, чтобы массив стал
itn sqrs[3][2].
Если менять вторую размерность, то да, ситуация меняется.
1
04.02.2014, 00:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2014, 00:04
Помогаю со студенческими работами здесь

В каждой строке матрицы найти максимум и его номер, затем номер элемента, который меньше (макс/2) и узнать его номер
Не можете подсказать, как все сделать в цикле Имеется матрицы, нужно в каждой строке найти...

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

Найти номер телефона указанного абонента с максимальной суммой оплаты
ПаскалЬ(поиски, замена положения в массиве)(ПСЕВДО БД) Здравствуйте, очень нужна ваша помощь....

Найти минимальный элемент среди максимальных элементов строк и вывести номер его столбца и строки
Добрый день! Нужна помощь Минимальный элемент среди максимальных элементов строк нашел, никак не...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru