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

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

Войти
Регистрация
Восстановить пароль
 
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
#1

Двойной strtok - C++

19.10.2012, 12:52. Просмотров 487. Ответов 3
Метки нет (Все метки)

Всем привет!

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

Как пример: хочу разбить входную строку на слова по пробелам, затем каждое слово разбить на подслова по двоеточиям.

C++
1
2
3
4
5
6
7
8
    for (char *pch = strtok (str, " "); pch; pch = strtok (NULL, " ")) //str - входная строка
{
        char *pch2 = new char[strlen(pch) + 1];
        strcpy (pch2, pch);
        for (char *pch3 = strtok (pch2, ":"); pch3; pch3 = strtok (NULL, ":")) {
            printf ("%s\n", pch3);
        }
}
Вопрос: почему внешний цикл проходится не до конца строки (а именно: до первого пробела) и как сделать так, чтобы искались все слова? (pch2 заводился с целью неизменения pch при втором strtok.)

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2012, 12:52     Двойной strtok
Посмотрите здесь:

strtok C++
strtok C++
C++ функция strtok
Strtok() и string C++
C++ warning strtok
C++ strtok
C++ strtok не работает
strtok C++
C++ функция strtok()
Функция strtok() C++
Strtok и strtok_s C++
C++ Strtok противоположность

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12512 / 7074 / 794
Регистрация: 27.09.2012
Сообщений: 17,466
Записей в блоге: 2
Завершенные тесты: 1
19.10.2012, 15:12     Двойной strtok #2
strtok работает только с последней переданной строкой.
Сначала разбейте основную строку на подстроки, а потом уже подстроки разбивайте.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17179 / 5433 / 336
Регистрация: 30.03.2009
Сообщений: 14,720
Записей в блоге: 26
19.10.2012, 15:35     Двойной strtok #3
На Си++, как мне кажется, для этого есть более удобные средства, чем strtok. А strtok в свою очередь является одним из самых дурных интерфейсов, поскольку имеет очень заумные побочные эффекты
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
24.10.2012, 03:55     Двойной strtok #4
Если интересно, недавно писал такой вот split с использованием только стандартной бибилотеки. Понятно, что есть boost с его split'ом, но тут ради одной коротенькой функции тянуть библиотеку придётся.
Yandex
Объявления
24.10.2012, 03:55     Двойной strtok
Ответ Создать тему
Опции темы

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