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

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

Войти
Регистрация
Восстановить пароль
 
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
#1

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

10.03.2012, 23:56. Просмотров 974. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2012, 23:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос как пробежаться по массиву указателей не зная количество его элементов? (C++):

по поводу указателей. Как правильно задавать массив указателей и его удалять? - C++
Т.е., например создаю указатель: TPoint *p_Point=NULL; а если массив? TPoint *p_MassPoint; //=?; как массив обнулить не ясно ...

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

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Надо присвоить значения массива а массиву b с помощю функции, и указателей - C++
Надо присвоить значения массива а массиву b с помощю функции, и указателей... Я написал, но не работет... В чём дело? #include...

Как найти угол, зная его тангенс? - C++
//НЕ СМОГ РЕШИТЬ ЗАДАЧУ ТАК КАК НЕ ЗНАЮ как из тангенса угла вычислить угол. // Задача 1.3 Васильев А.Н #include <iostream> #include...

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей - C++
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Байт
Эксперт C
16061 / 10330 / 1540
Регистрация: 24.12.2010
Сообщений: 19,458
11.03.2012, 00:02 #2
Последний указатель в массиве должен быть = NULL
1
-=ЮрА=-
Заблокирован
Автор FAQ
11.03.2012, 06:42 #3
panicwassano, вот твоя функция поиска подстроки
strstr(p,name) - это стандартная функция string.h читай о ней здесь(там и пример есть)
http://www.cplusplus.com/reference/c...string/strstr/

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

Не по теме:

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

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

Не по теме:

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



panicwassano, можешь показать весь свой алгоритм?Тогда смогу правильно поняв задание записать код, свой пост без указателя писал в предположнии что р - это строка а не масив строк, так что возможно ты поспешил поблагодарить Байт...
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
11.03.2012, 12:26  [ТС] #6
я уже разобрался, вылетает, когда массив указателей char *p[] создается локально и тогда следующий указатель не 0, просто добавил static, либо можно перенести в глобальную перменную
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
11.03.2012, 12:35 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Код писал в предположении что у panicwassano, есть строка текста а не 2-мерный массив строк тогда и передача в функцию должна быть int search(char *p, const char *name), вот и всё
Ага, слив засчитан. С чего это вы вдруг так предположили, когда код красноречиво говорит о поиске строки в массиве строк?
3
-=ЮрА=-
Заблокирован
Автор FAQ
11.03.2012, 12:52 #8
Цитата Сообщение от 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
11.03.2012, 13:06 #9
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
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.03.2012, 13:57 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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/f5cdf0...98eb0ea89da7ac
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2012, 13:57
Привет! Вот еще темы с ответами:

Как посчитать количество элементов в массиве и распечатать его? - C++
Как посчитать кол-во элементов в массиве и распечатать его? В символьных строках, вроде как strlen, а с цифрами как? Вроде как надо...

Как зная площадь треугольника установиться его координаты. - C++
Как зная площадь треугольника установиться его координаты. Естественно любые. Например площадь = 5 тогда координаты : 0 0 4 2 5...

Как создать копию объекта, зная его указатель? - C++
Здравствуйте, существует следующая проблема. В своей программе я рисую график используя класс QwtPolarPlot. По нажатию на график, должно...

Как открыть бинарный файл, не зная его структуру? - C++
Можно ли как-нибудь открыть бинарный файл, не зная его структуру?


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

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

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