使用C ++计算字符串中区分大小写的单词

时间:2017-03-01 01:39:22

标签: c++ c++11

我想计算字符串s中有多少个唯一且区分大小写的单词。到目前为止,我已经将标点符号转换为空格,并将每个单独的单词(用空格分隔)添加到一个集合中。由于set仅包含唯一元素,因此以下函数返回1。但是,它应该返回2,因为字符串s有2个区分大小写的单词(abAB)。

如何检查字符串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;
}

1 个答案:

答案 0 :(得分:4)

这里的问题并不是区分大小写的。它是您提供给transform的lambda。

您尝试用空格替换分隔符。不幸的是,如果isWordSeparator返回true,则返回空格,否则无法返回任何

将您的transform更改为以下内容:

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

......获得有用结果的机会将大大改善。