【问题标题】:Counting case-sensitive words in a string using C++使用 C++ 计算字符串中区分大小写的单词
【发布时间】:2017-03-01 01:39:22
【问题描述】:

我想计算字符串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;
}

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    这里的问题不在于区分大小写。它与您提供给 transform 的 lambda 一起使用。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多