![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
icewind |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 11.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 20 |
Помогите, пожалуйста. Необходимо разбить строку на слова по пробелу. Тип строки обязательно char. Пытался сделать так
но вываливается с segmentation fault. Как лучше реализовать эту задачу? -------------------- ![]() |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
|
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
|
|||
|
||||
icewind |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 11.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 20 |
Спасибо за совет, но string и vector не пойдет. Не смотря на то что пишу на c++ нужны на входе обязательно char *, а на выходе char**. Знаю что в с++ лучше использовать STL, но мне дальше эти данные обрабатывать именно как char. Переписывать все не хочется.
-------------------- ![]() |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
Добавлено через 21 секунду http://www.cplusplus.com/reference/clibrary/cstring/strtok/ |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
|
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
...
Это сообщение отредактировал(а) zim22 - 6.5.2009, 13:14 |
|||
|
||||
icewind |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 11.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 20 |
Спасибо. Но strtok я уже смотрел и статический буфер при обработке строки не очень подходит.
У меня уже сложилось впечатление что я с самого начала не туда копать начал... Вот вроде перебор по символам придумал, но не вышло... Думаю с памятью накосячил. Если просто распечатывать буфер, то все работает Это сообщение отредактировал(а) icewind - 6.5.2009, 13:25 -------------------- ![]() |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
||||
|
||||
icewind |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 11.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 20 |
Спасибо, но это опять не в мою кассу... До того как задаться этим вопросом я думал есть рабочая сишная функция для этого, а не те учебные примеры если у нас не больше 10 слов и в каждом слове по 8 символов тогда в цикле печатаем... Странновато... ![]() -------------------- ![]() |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
По строке пожно пройтись и в два прохода - это не файл.
Первый проход - подсчёт числа слов, выделение памяти для результата strtok() портит исходную строку Используй strchr(), strspn(), strcspn()
Это сообщение отредактировал(а) math64 - 6.5.2009, 14:38 |
|||
|
||||
icewind |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 11.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 20 |
Спасибо за совет! Я о двух проходах не думал. Попробую
-------------------- ![]() |
|||
|
||||
Dov |
|
||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
Не понял в чём проблема, но, по-моему, strtok прекрасно справляется со своей задачей.
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||
|
|||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Перед его использованием ты делаешь strdup() оригинальной строки и делаешь strdup() найденных слов - то что портится КОПИЯ исходной строки, роли не влияет. Но вот размер массива result вычисляется неточно (если будут два пробела подряд - выделяется больше чем нужно). |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |