【问题标题】:Unique word count in C++ help?C ++帮助中的唯一字数?
【发布时间】:2011-05-13 09:50:22
【问题描述】:

我想做一个可以计算唯一单词的函数。例如:

“我喜欢编程一些有用的东西。我喜欢吃东西。现在吃冰淇淋。”

在这种情况下,每个唯一的词:

I occurs 2
like occurs 2
...

稍后我将忽略此案。请帮忙

编辑:

我已经完成了函数的编写。它完美地工作。感谢所有的帮助。非常感谢。

【问题讨论】:

    标签: c++ function word-count


    【解决方案1】:

    听起来您想使用带有键字符串和 int 数据的 std::map。

    如果地图中已不存在某个项目,则将其添加为 int 值 1。如果该项目已存在于地图中,则只需将 1 添加到其关联值。

    【讨论】:

    • 我明白了。如果我使用地图,我以后可以整理出来吗?喜欢按频率排序
    • 能否请您指导我,如果我的情况与此类似:forum.codecall.net/c-c/…。我非常需要它
    • @cpp_learner:如果您不确定其他方面,您可以提出另一个问题,说明您感到困惑的是什么。
    • @Brian R. Bond:您无法对 std::map 进行排序。不过,您可以使用自定义排序函数对其进行实例化。
    • 当您第一次访问索引时,它将被初始化为零。所以简单的解决方案就是总是 1
    【解决方案2】:

    我会把它当作一个家庭作业问题(希望没有人会如此轻率地提供完整的代码)。

    如果您对“单词”的定义非常松散感到满意,那么 iostream 输入已经为您将输入拆分为单词。

    然后使用例如std::map 统计不同的单词。

    干杯,

    【讨论】:

    • 哦,我不希望有完整的代码。使用地图等的示例代码就可以了。以后我会自己去探索更多
    • @cpp_learner:有关如何在 C++ 中使用std::map 或任何其他标准库结构的示例,请参阅cplusplus.com/reference
    【解决方案3】:

    这是了解迭代器和标准算法的绝佳机会。

    std::istream_iterator 迭代从给定流中提取的单词列表,std::cin 或文件或字符串。

    std::unique 可以帮助您实现目标。

    示例程序:

    #include <algorithm>
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    
    int main()
    {
        istream_iterator<string> begin(cin), end;
        vector<string> tmp;
    
        copy(begin, end, back_inserter(tmp));
        sort(tmp.begin(), tmp.end());
        vector<string>::iterator it = unique(tmp.begin(), tmp.end());
    
        cout << "Words:\n";
        copy(tmp.begin(), it, ostream_iterator<string>(cout));
    }
    

    有关标准库的进一步参考,请参阅http://www.cplusplus.com。

    【讨论】:

    • 不错的尝试:但 istream_iterator 将单词定义为空格分隔。这对大多数情况都很好。但在这里标点符号将发挥作用。另外,当地图会自动对传入的内容进行排序和计数时,为什么还要使用矢量。
    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多