使用C 计数字符串中的情况敏感单词

Counting case-sensitive words in a string using C++

本文关键字:情况 单词 数字 字符串 使用      更新时间:2023-10-16

我想计算字符串 s中有多少个唯一和情况敏感的单词。到目前为止,我将标点转换为空间,并将每个单独的单词(由空间隔开)添加到一个集合中。由于set仅包含唯一的元素,因此以下功能返回1。但是,由于字符串s具有2个敏感单词(abAB)。

,它应该返回2个。

我如何检查字符串s?

中单词的情况敏感性
bool isWordSeparator(char c) {
    return std::isspace(c) || std::ispunct(c);
}
int main() {
    string s = "abnAB!ab?AB:ab.AB;abnAB";
    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;
}

这里的问题实际上并不是案例灵敏度。是与您向transform提供的lambda。

您正在尝试用空格替换分离器。不幸的是,如果isWordSeparator返回true,则您返回空间时,您无法返回否则否则。

将您的transform更改为这样的东西:

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

...获得有用结果的机会将大大提高。