Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
70 / 70 / 36
Регистрация: 16.06.2009
Сообщений: 240
1

Двойной strtok

19.10.2012, 12:52. Просмотров 895. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2012, 12:52
Ответы с готовыми решениями:

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

strtok
Почему так работает #include <stdafx.h> #include <conio.h> using namespace std; int main(){...

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

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

3
Don't worry, be happy
16917 / 9794 / 1886
Регистрация: 27.09.2012
Сообщений: 24,291
Записей в блоге: 2
19.10.2012, 15:12 2
strtok работает только с последней переданной строкой.
Сначала разбейте основную строку на подстроки, а потом уже подстроки разбивайте.
0
Evg
Эксперт CАвтор FAQ
21144 / 8160 / 628
Регистрация: 30.03.2009
Сообщений: 22,467
Записей в блоге: 30
19.10.2012, 15:35 3
На Си++, как мне кажется, для этого есть более удобные средства, чем strtok. А strtok в свою очередь является одним из самых дурных интерфейсов, поскольку имеет очень заумные побочные эффекты
0
Эксперт С++
5039 / 3100 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
24.10.2012, 03:55 4
Если интересно, недавно писал такой вот split с использованием только стандартной бибилотеки. Понятно, что есть boost с его split'ом, но тут ради одной коротенькой функции тянуть библиотеку придётся.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2012, 03:55

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Функция strtok()
Доброе время суток! Подскажите пожалуйста в чем проблема и как с ней бороться. Имеем такой...

Функция strtok
Пытаюсь решить задачу из Дейтела, подсчитать количество вхождений каждого слова в предложение,...

warning strtok
Пишу в 10 студии: char* bla = strtok("bla bla bla", " "); Выдаёт варнинг: This function or...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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