Консультация № 96051
23.07.2007, 11:28
0.00 руб.
0 2 2
Здравствуйте. Подскажите пожалуйста, как можно распарсить строку типа String на отдельные слова, есть ли для этого стандартные функции, типа strtok()? Еще было бы интересно знать как получить многословную строку в char* из потока ввода.

Обсуждение

Неизвестный
23.07.2007, 11:38
общий
это ответ
Здравствуйте, Losaped!
Стандартных функции нет. Используя функцию find можно искать пробел мужде слов, а затем функцией assign выделять нужное слово. Вместо assign можно еще использовать функцию substr.
Неизвестный
24.07.2007, 03:15
общий
это ответ
Здравствуйте, Losaped!
У строк из STL нет специальных функций для рапарсивания. Поэтому нужно пользоваться функциями поиска и подстрок. В приложении есть подобный пример. А для серьезных целей лучше воспользоваться классом tokenizer из библиотеки boost. Подробней об этом классе смотрите здесь:

<a href=http://www.boost.org/libs/tokenizer/index.html>http://www.boost.org/libs/tokenizer/index.html</a>

Приложение:
#include <vector>#include <string>#include <iostream>using namespace std;int main(int argc, char* argv[]) { string tokens = " .,:;@#\t\n"; string str = "This is a test string"; string::size_type beg_index = 0; string::size_type end_index = 0; vector<string> words; while((beg_index = str.find_first_not_of(tokens, end_index)) != string::npos) { end_index = str.find_first_of(tokens, beg_index); words.push_back(str.substr(beg_index, end_index - beg_index)); } vector<string>::iterator iter; for(iter = words.begin(); iter != words.end(); ++iter) cout << *iter << endl; return 0;}
Форма ответа