2017-03-01 110 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; 
}); 

...并获得有用的结果的可能性将大大提高。

相关问题