c++ - 有效地使用带数组的 KMP 来计算词频计数

标签 c++ c

我想统计一篇文章的词频。

我的想法是先创建一个struct数组

 struct{
       char[WORD_SIZE]
 }data[MAX_WORD_NUMBER];

然后读取每个字符然后确定

isalpha();

然后通过

转换为小写
tolower();

然后为每个结构存储一个单词。

然后为每个词做失败函数,

然后通过调用来测试每​​个单词。

1.但是由于重复导致不知道怎么统计频率

(本以为每次读入一个词的时候都可以对比一下,结果实在是太没效果了,请问有没有更高效的方法?)

2.我觉得我的方法调用函数太多了。

如何更有效地使用 KMP?

最佳答案

您使用 C 还是 C++ 编程?你用两者标记了你的问题。

假设您使用的是 C++,那么您将更好地使用 std::map 来计算您的字数。像这样

#include <map>
#include <string>

std::map<std::string, int> data;

std::string word;

data[word] = 0; // set word count to zero
data[word]++; // increment word count

// print out all the word counts
for (std::map<std::string, int>::iterator i = data.begin();
  i != data.end(); ++i)
{
  cout << "word " << i->first << " occurs " << i->second << "times\n";
}

如果您为工作选择合适的工具,这项任务将如此容易得多。当然,如果您使用 C 语言编程,那么这些都无济于事。

关于c++ - 有效地使用带数组的 KMP 来计算词频计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12987682/

相关文章:

python - pybind11 分区日期时间转换

c++ - 如何在 Qt 中检查我的应用程序的内存使用情况

c - 输入文件时出现 SegFault

c - 头文件与库

c - 请问 MessageBox() "eat"我的用户自定义消息?

c++ - 在 ubuntu 18.04 上找不到 "Findaws-lambda-runtime.cmake"

java - 来自 Java 的 Xerces-C XSModel 端口

c++ - 如何退出单圈 `for` 循环?

c++ - 如何让 gcc 警告缩小函数参数

c++ - 如何在c/c++中将文件从一个目录复制到另一个目录