2017-03-01 317 views
0

我想計算字符串s中有多少個區分大小寫的字。到目前爲止,我已經將標點轉換爲空格,並將每個單獨的詞(由空格分隔)添加到一個集合中。由於set僅包含唯一元素,因此以下函數返回1。但是,由於字符串s有2個區分大小寫的字(abAB),所以它應該返回2。使用C++對字符串中的區分大小寫的字進行計數

如何檢查字符串s中單詞的區分大小寫?

bool isWordSeparator(char c) { 
    return std::isspace(c) || std::ispunct(c); 
} 

int main() { 
    string s = "ab\nAB!ab?AB:ab.AB;ab\nAB"; 

    transform(s.begin(), s.end(), s.begin(), [](char c)->char { 
     if (isWordSeparator(c)) 
      return ' '; 
    }); 

    istringstream iss(s); 

    set<string> words((istream_iterator<string>(iss)), istream_iterator<string>()); 



    cout << "Number of Words: " << words.size() << endl; 

    return 0; 
} 

回答

4

這裏的問題是不是真的區分大小寫。這是與你提供給transform的lambda。

您試圖用空格替換分隔符。不幸的是,雖然你返回一個空格,如果isWordSeparator返回true,你不能返回什麼否則。

更改transform到這樣的事情:

transform(s.begin(), s.end(), s.begin(), [](char c)->char { 
    if (isWordSeparator(c)) 
     return ' '; 
    else 
     return c; 
}); 

...並獲得有用的結果的可能性將大大提高。

相關問題