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

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

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

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

19.10.2012, 12:52. Просмотров 515. Ответов 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.)

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2012, 12:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двойной strtok (C++):

Использование STRTOK Разбить строку на слова, из слов составить список C++ Функция strtok - C++
Задача Дана строка слов с разделителями, в данном примере слова с пробелами Нужно, используя функцию strtok, сформировать из этих слов...

strtok - C++
Почему так работает #include <stdafx.h> #include <conio.h> using namespace std; int main(){ char string = "a string, of ,...

strtok - C++
Привет! Решаю задачку на строки char. Возникла проблема вот код: //vuravnivanie slov po levomy i pravomy pol9m stranicu ...

strtok - C++
Скажите, если ли функция, аналог strtok, для типа string?

strtok - C++
как с помощью функции strtok вывести последнее слово

Strtok противоположность - C++
Есть ли функция, противоположная strtok? Надо соединить две строки вида массивов char'ov в одну, используя разделитель

3
Croessmah
Эксперт CЭксперт С++
13420 / 7574 / 855
Регистрация: 27.09.2012
Сообщений: 18,649
Записей в блоге: 3
Завершенные тесты: 1
19.10.2012, 15:12 #2
strtok работает только с последней переданной строкой.
Сначала разбейте основную строку на подстроки, а потом уже подстроки разбивайте.
0
Evg
Эксперт CАвтор FAQ
17950 / 6181 / 413
Регистрация: 30.03.2009
Сообщений: 16,972
Записей в блоге: 27
19.10.2012, 15:35 #3
На Си++, как мне кажется, для этого есть более удобные средства, чем strtok. А strtok в свою очередь является одним из самых дурных интерфейсов, поскольку имеет очень заумные побочные эффекты
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.10.2012, 03:55 #4
Если интересно, недавно писал такой вот split с использованием только стандартной бибилотеки. Понятно, что есть boost с его split'ом, но тут ради одной коротенькой функции тянуть библиотеку придётся.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 03:55
Привет! Вот еще темы с ответами:

Не работает strtok() - C++
Здравствуйте, нужно посчитать количество слов в файле. Подскажите пожалуйста, что не так. Выводит только первую строку и все, количество...

функция strtok - C++
расскажите алгоритм char str ="- This, a sample string."; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); ...

Функция strtok() - C++
Доброе время суток! Подскажите пожалуйста в чем проблема и как с ней бороться. Имеем такой код: #include <iostream> ...

strtok не работает - C++
Почему не работает код? #include <string.h> #include <iostream.h> #pragma argsused int main(int argc, char* argv) { ...


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

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

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