c++ - 计算文件中每个字母的出现次数?

标签 c++ c algorithm file optimization

即使文件大小高达 4GB 或更大,如何以优化的方式查找字母 A-Z 的出现(忽略大小写)? C++/C 中可能有哪些不同的实现?

一个实现是:

伪代码

A[26]={0}
loop through each character ch in file
If isalpha(ch)
     A[tolower(ch)-'A']+ = 1
End If
end loop

最佳答案

我认为没有多少优化余地。

  • 不是为每个元素计算 tolower()-'A',而是计算每个字符的出现次数(在 char[256] 累加器中),并在之后进行 case-aware 计算(可能更有效,也可以不试)。

  • 一定要使用缓冲输入(fopen,也许用 setvbuf 分配更大的缓冲区)。

例如:

acum[256]={0}
loop through each character 'c' in file
     acum[c]++
end loop
group counts corresponding to same lowercase/uppercase letters

此外,请记住,这假定 ASCII 或派生(一个八位字节 = 一个字符)编码。

关于c++ - 计算文件中每个字母的出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14144718/

相关文章:

c++ - 调用特定于类的运算符 new

c - 在 64 位机器上分析 Set 实现

c - 查找大小未知的循环链表的最后一个节点,最后一个节点指向除链表第一个节点以外的任何其他节点

c - 为什么 FFmpeg 代码不能在不同的 ARM 64 位平台上编译?

c# - 简单的素数程序 - 线程 C# 的奇怪问题

c++ - 关联数组、数组和树

c++ - boost::any 是否保存拷贝或引用/指针?

c++ - 有人能解释一下这段 C++ 代码吗,我看不懂

java - 动态规划解法讲解

algorithm - 找到离开顶点的最左边的线