Подсчет количества слов в строке, переполнение стека

Возможный дубликат:
C ++ функция для подсчета всех слов в строке

Итак, у меня есть строка слов, которую я сохранил в строке, используя C ++. то есть «Был фермер по имени Билли \ n»

Я хочу узнать количество слов в строке (т.е. в настоящее время в ней 6 слов). Может кто-нибудь сказать мне, как это сделать? Если это невозможно, есть ли способ подсчитать количество пробелов в строке (т. Е. «»). Дайте мне знать, спасибо!

6

Решение

Конечно, все просто:

std::cout << "number of words: "<< std::distance(std::istream_iterator<std::string>(
std::istringstream(str) >> std::ws),
std::istream_iterator<std::string>()) << '\n';

Просто для пояснения:

  1. Чтение std::string читает слово после пропуска ведущих пробелов, где слово это последовательность непробельных символов.
  2. std::istream_iterator<T> превращает входной поток в последовательность T объекты, читая соответствующие объекты, пока чтение не завершится неудачей.
  3. std::istringstream занимает std::string и превращает его в поток, читаемый из.
  4. Аргумент конструктора std::istream_iterator<T> является std::istream&временный std::istringstream не может быть использован напрямую, но ссылка должна быть получена. Это единственный интересный эффект std::ws который также пропускает ведущие пробелы.
  5. std::distance() определяет, сколько элементов в последовательности (изначально используется std::count() определяет, сколько элементов в последовательности соответствует заданному условию, но условие фактически отсутствовало).
9

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

Простой способ подсчета слов — использование оператора >> с std :: string, например:

std::stringstream is("There was a farmer named Billy");
std::string word;

int number_of_words = 0;
while (is >> word)
number_of_words++;

При извлечении std :: string из std :: istream оператор >> () в своих настройках по умолчанию пропускает пробел, что означает, что каждое слово будет разделено одним или несколькими пробелами. Таким образом, приведенный выше код даст вам тот же результат, даже если слова разделены более чем одним пробелом.

8

По вопросам рекламы [email protected]