Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004

как пробежаться по массиву указателей не зная количество его элементов?

10.03.2012, 23:56. Показов 3314. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
собственно код из книги Шилдта
C++
1
2
3
4
5
6
7
8
9
int search(char *p[], const char *name)
{
    for (int i = 0; p[i]; i++)
    {
        if (!strcmp(p[i], name)) return i;
    }
 
    return -1;
}
если name не содержится в массиве то программа вылетает, есть ли способ? кроме try, catch
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.03.2012, 23:56
Ответы с готовыми решениями:

Как пробежаться по массиву в цикле, не зная его размера
Например: надо суммировать первый элемент массива А1(0) с каждым элементом массива А2(i) что-бы не задавать 100 проходов For i=0 to...

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

Как найти количество элементов массива, зная лишь адрес первого элемента и тип?
Где-то в коде объявлен массив, кол-во элементов неизвестно, имеется ссылочная переменная на этот массив и все, назовем ее (А), как узнать...

9
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
11.03.2012, 00:02
Последний указатель в массиве должен быть = NULL
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
11.03.2012, 06:42
panicwassano, вот твоя функция поиска подстроки
strstr(p,name) - это стандартная функция string.h читай о ней здесь(там и пример есть)
http://www.cplusplus.com/refer... ng/strstr/

Добавлено через 2 минуты
PS
Цитата Сообщение от panicwassano Посмотреть сообщение
strcmp(p[i], name)
- так нельзя сравнивать - потому как сравниваешь символ p[i] со строкой name. Тогда уже так запиши
C
1
strcmp(p + i,name);
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
11.03.2012, 10:07
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
PS - так нельзя сравнивать - потому как сравниваешь символ p[i] со строкой name.
Чего это вдруг? p[i] - указатель. Повнимательней читайте код.
Тогда уже так запиши
C
1
strcmp(p + i,name);
А вот это уже ошибка.

Не по теме:

Ну и чему вы учите молодежь?

1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
11.03.2012, 12:23
Байт, я писал для p строки а не указателя!Код писал в предположении что у panicwassano, есть строка текста а не 2-мерный массив строк тогда и передача в функцию должна быть int search(char *p, const char *name), вот и всё

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
Ну и чему вы учите молодежь?
- уважаемый мне вернуться в топик о комплексных числах и показать на косяк???Вспомни поговорку о соринке в чужом и бревне в своём глазу



panicwassano, можешь показать весь свой алгоритм?Тогда смогу правильно поняв задание записать код, свой пост без указателя писал в предположнии что р - это строка а не масив строк, так что возможно ты поспешил поблагодарить Байт...
0
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
11.03.2012, 12:26  [ТС]
я уже разобрался, вылетает, когда массив указателей char *p[] создается локально и тогда следующий указатель не 0, просто добавил static, либо можно перенести в глобальную перменную
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
11.03.2012, 12:35
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Код писал в предположении что у panicwassano, есть строка текста а не 2-мерный массив строк тогда и передача в функцию должна быть int search(char *p, const char *name), вот и всё
Ага, слив засчитан. С чего это вы вдруг так предположили, когда код красноречиво говорит о поиске строки в массиве строк?
3
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
11.03.2012, 12:52
Цитата Сообщение от panicwassano Посмотреть сообщение
я уже разобрался, вылетает, когда массив указателей char *p[] создается локально и тогда следующий указатель не 0, просто добавил static, либо можно перенести в глобальную перменную
-

panicwassano, сделай свой 2-мерный массив вот так
char * pARRAY[] = {"one","two","three",...,"n-tltmtnt",NULL}
Обрати внимание на последний элемент, он NULL c таким построением pARRAY твоя изначальная функция будет работать корректно и ничего в алгоритме отваливаться не будет

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Ага, слив засчитан. С чего это вы вдруг так предположили, когда код красноречиво говорит о поиске строки в массиве строк?
- никакого слива нет, если посмотришь на все мои посты вчера увидишь что заходил на форум с 10 утра по нашему украинскому до 4 утра следующего дня!Я писал один заказ около 24 часов и на форум заходил хоть немного отвлечь мозги.
В 3 ночи после почти дня писанины кода мозг любого человека может воспринять задание по своему...

0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
11.03.2012, 13:06
panicwassano, посмотри код ниже - он не будет вылетать
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
#include <stdio.h>
#include <string.h>
 
int search(char *p[], const char *name)
{
    int index = -1,i;
    for (i = 0; p[i] && index == -1; i++)
    {
        if (!strcmp(p[i], name))
            index = i;
    }
    return index;
}
 
int main()
{
    char name[32];
    char * pArray[] = {"one","two","three","four",NULL};
    printf("Enter string to find : ");
    scanf("%s",name);
    getchar();//убрали \n от ввода
    int i = search(pArray, name);
    if(i == -1)
        printf("Input array not contain element %s\n",name);
    else
        printf("Index of %s in array is %d\n",name,i + 1);
    printf("Press any key to continue\n");
    getchar();//стоп-точка
    return 0;
}
Проверка http://codepad.org/BD25UBKD
Миниатюры
как пробежаться по массиву указателей не зная количество его элементов?  
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
11.03.2012, 13:57
Лучший ответ Сообщение было отмечено как решение

Решение

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 <algorithm>
#include <string>
#include <vector>
 
int main()
{
   std::vector<std::string> v = { "Hello", "world", "Dog", "Cat", "Hi" };
   std::string includes("Hi"), wrong("Go");
   
   auto it1 = std::find(std::begin(v), std::end(v), includes);
   auto it2 = std::find(std::begin(v), std::end(v), wrong);
   
   std::cout << includes 
             << " [ " 
             << (it1 != std::end(v) ? it1 - std::begin(v) : -1)
             << " ] "
             << std::endl
             << wrong             
             << " [ "
             << (it2 != std::end(v) ? it2 - std::begin(v) : -1)
             << " ] "
             << std::endl;
}
http://liveworkspace.org/code/... 0ea89da7ac
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2012, 13:57
Помогаю со студенческими работами здесь

Вычислить произведение элементов кратных 3 в массиве и общее количество элементов массиву Z
1) В одномерном массиве из N элементов найти среднее арифметическое и разделить его на номер наибольшего аргумента( чисел желательно 5). ...

По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE
По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE, если выполнено указанное ниже...

Обращение у массиву указателей
Привет! Появились затруднения с обращением к массиву указателей на ЧИСЛО Например, int *arr; arr = (int*)malloc(sizeof(int)*10); ...

Присвоить строки массиву указателей
Здравствуйте! Наверное вопрос глупый, но я оправдаюсь тем, что я новичек. Так вот: Есть массив указателей char *arr; Из книжки по си...

Присваивание символов массиву указателей
Сама проблема описана в комментариях кода. Это ведь одно и то же действие, разве нет? #include &lt;stdio.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru