2012-03-05 2 views

ответ

2
#include <algorithm> 
#include <cctype>  
#include <functional> 
#include <string> 


inline unsigned CountWords(const std::string& s)   
{  
std::string x = s; 
std::replace_if(x.begin(), x.end(), std::ptr_fun <int, int> (std::isspace), ' '); 
x.erase(0, x.find_first_not_of(" ")); 
if (x.empty()) return 0; 
return std::count(x.begin(), std::unique(x.begin(), x.end()), ' ') + !std::isspace(   *s.regin());   
} 
+0

Для тех, кто нуждается в объяснении этого превосходного ответа, может помочь следующее. std :: replace_if заменяет все пробелы пробелами. Вызов стирания стирает все символы пробела с начала строки. Вызов std :: unique возвращает новую строку, в которой удаляются все повторяющиеся дубликаты. Вызов std :: count возвращает количество пробелов и, следовательно, слов в строке, возвращаемой std :: unique. Наконец, к полученному счету добавляется либо 0, либо 1, в зависимости от того, начинается ли исходная строка в пространстве. –

0
int count_words(const char *input_buf) { 
    stringstream ss; 
    ss << input_buf; 
    string word; 
    int words = 0; 
    while(ss >> word) words++; 
    return words; 
} 
Смежные вопросы