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

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

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

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

19.10.2012, 12:52. Просмотров 508. Ответов 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++
Задача Дана строка слов с разделителями, в данном примере слова с пробелами Нужно, используя функцию strtok, сформировать из этих слов...

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

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

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

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

Strtok и strtok_s - C++
Доброго времени суток. Есть вот такой код: Info::Info(ifstream &f) { char STR=""; char *delim = "\t"; char *ptr; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
19.10.2012, 15:12     Двойной strtok #2
strtok работает только с последней переданной строкой.
Сначала разбейте основную строку на подстроки, а потом уже подстроки разбивайте.
Evg
Эксперт CАвтор FAQ
17547 / 5785 / 370
Регистрация: 30.03.2009
Сообщений: 15,934
Записей в блоге: 26
19.10.2012, 15:35     Двойной strtok #3
На Си++, как мне кажется, для этого есть более удобные средства, чем strtok. А strtok в свою очередь является одним из самых дурных интерфейсов, поскольку имеет очень заумные побочные эффекты
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 03:55     Двойной strtok
Еще ссылки по теме:

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

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

warning strtok - C++
Пишу в 10 студии: char* bla = strtok("bla bla bla", " "); Выдаёт варнинг: This function or variable may be unsafe. Consider using...

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


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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.10.2012, 03:55     Двойной strtok #4
Если интересно, недавно писал такой вот split с использованием только стандартной бибилотеки. Понятно, что есть boost с его split'ом, но тут ради одной коротенькой функции тянуть библиотеку придётся.
Yandex
Объявления
24.10.2012, 03:55     Двойной strtok
Ответ Создать тему
Опции темы

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