массив на основе предложения в переполнении стека

Возможный дубликат:
Разделение строки в C ++

Как прочитать кучу слов, разделенных пробелами, в массив?

Скажи, что у меня есть это предложение:

«Я люблю лягушек»

И этот массив:

string mySentenceArray[2]

Я хотел бы сделать

mySentenceArray[0] = I
mySentenceArray[1] = like
mySentenceArray[2] = frogs

Просто в качестве примера. (Пожалуйста, никто не говорит мне, чтобы жестко закодировать предложение, которое я только что написал, это пример.)

0

Решение

Вы можете превратить строку в серию токенов и поместить эти токены в массив. Учти это: http://www.cplusplus.com/reference/clibrary/cstring/strtok/

0

Другие решения

Есть несколько способов:

  1. использование strtok. Но это C-функция, а не C ++. Смешивание C и C ++ — плохой стиль. более того strtok функция не является поточно-ориентированной

  2. Используйте любой из станд :: строка :: найти метод. Это сложно.

  3. использование станд :: stringstream учебный класс. Это требует слишком много шагов.

  4. использование повышение :: Алгоритм :: строка :: раскол. Я предпочитаю этот путь. Это просто и быстро.

0

Если бы у меня не было других способов оправдать добавление дополнительной библиотеки, я бы просто использовал stringstream:

std::istringstream buffer("I like frogs");

std::vector<std::string> words((std::istream_iterator<std::string>(buffer)),
std::istream_iterator<std::string>());

std::copy(words.begin(), words.end(),
std::ostream_iterator<std::string>(std::cout, "\n"));
0

Используя только стандартную библиотеку:

istringstream sentence("I like frogs");
vector<string> words(
(istream_iterator<string>(sentence)),
(istream_iterator<string>()));

Обратите внимание, что ненужные, казалось бы, круглые скобки действительно необходимы по крайней мере для одного из аргументов конструктора, в противном случае вы будете раздражены самый неприятный разбор.

В качестве альтернативы, Boost предоставляет некоторые полезные строковые алгоритмы, в том числе split:

string sentence("I like frogs");
vector<string> words;
boost::algorithm::split(words, sentence, boost::algorithm::is_space());
0
По вопросам рекламы [email protected]