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

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

Восстановить пароль Регистрация
 
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
19.10.2012, 12:52     Двойной strtok #1
Всем привет!

Возник такой вопрос. В ходе решения одной задачи, связанной с разбиением строки на некоторые подмножества слов, обнаружила, что не совсем понимаю логику действия функции 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 C++
C++ функция strtok()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,871
Записей в блоге: 2
Завершенные тесты: 1
19.10.2012, 15:12     Двойной strtok #2
strtok работает только с последней переданной строкой.
Сначала разбейте основную строку на подстроки, а потом уже подстроки разбивайте.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
19.10.2012, 15:35     Двойной strtok #3
На Си++, как мне кажется, для этого есть более удобные средства, чем strtok. А strtok в свою очередь является одним из самых дурных интерфейсов, поскольку имеет очень заумные побочные эффекты
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
24.10.2012, 03:55     Двойной strtok #4
Если интересно, недавно писал такой вот split с использованием только стандартной бибилотеки. Понятно, что есть boost с его split'ом, но тут ради одной коротенькой функции тянуть библиотеку придётся.
Yandex
Объявления
24.10.2012, 03:55     Двойной strtok
Ответ Создать тему
Опции темы

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