Возможный дубликат:
C ++ функция для подсчета всех слов в строке
Итак, у меня есть строка слов, которую я сохранил в строке, используя C ++. то есть «Был фермер по имени Билли \ n»
Я хочу узнать количество слов в строке (т.е. в настоящее время в ней 6 слов). Может кто-нибудь сказать мне, как это сделать? Если это невозможно, есть ли способ подсчитать количество пробелов в строке (т. Е. «»). Дайте мне знать, спасибо!
Конечно, все просто:
std::cout << "number of words: "<< std::distance(std::istream_iterator<std::string>(
std::istringstream(str) >> std::ws),
std::istream_iterator<std::string>()) << '\n';
Просто для пояснения:
std::string
читает слово после пропуска ведущих пробелов, где слово это последовательность непробельных символов.std::istream_iterator<T>
превращает входной поток в последовательность T
объекты, читая соответствующие объекты, пока чтение не завершится неудачей.std::istringstream
занимает std::string
и превращает его в поток, читаемый из.std::istream_iterator<T>
является std::istream&
временный std::istringstream
не может быть использован напрямую, но ссылка должна быть получена. Это единственный интересный эффект std::ws
который также пропускает ведущие пробелы.std::distance()
определяет, сколько элементов в последовательности (изначально используется std::count()
определяет, сколько элементов в последовательности соответствует заданному условию, но условие фактически отсутствовало).Простой способ подсчета слов — использование оператора >> с 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 оператор >> () в своих настройках по умолчанию пропускает пробел, что означает, что каждое слово будет разделено одним или несколькими пробелами. Таким образом, приведенный выше код даст вам тот же результат, даже если слова разделены более чем одним пробелом.