即使文件大小高达 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/