我想计算字符串s
中有多少个唯一且区分大小写的单词。到目前为止,我已经将标点符号转换为空格,并将每个单独的单词(用空格分隔)添加到一个集合中。由于set
仅包含唯一元素,因此以下函数返回1
。但是,它应该返回2,因为字符串s
有2个区分大小写的单词(ab
和AB
)。
如何检查字符串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;
}
答案 0 :(得分:4)
这里的问题并不是区分大小写的。它是您提供给transform
的lambda。
您尝试用空格替换分隔符。不幸的是,如果isWordSeparator
返回true
,则返回空格,否则无法返回任何。
将您的transform
更改为以下内容:
transform(s.begin(), s.end(), s.begin(), [](char c)->char {
if (isWordSeparator(c))
return ' ';
else
return c;
});
......获得有用结果的机会将大大改善。