gcox@kuten:~> cat count.cpp
#include <stdio.h>
#include <vector>
int main(void)
{
char * buffer = new char[10240];
size_t read;
size_t counts[256];
size_t total = 0;
memset(&counts, 0, sizeof(size_t) * 256);
FILE* fle = fopen("./LetterFrequencyInput.txt", "r");
while ((read = fread(buffer, 1, 10240, fle)) > 0)
{
while (read > 0)
{
char val = buffer[--read];
++counts[val];
#ifdef WHOLE_FILE
++total;
#endif
}
}
delete[] buffer;
fclose(fle);
#ifndef WHOLE_FILE
for (size_t i = 0; i < 26; ++i)
{
total += counts[i + 'a'] + counts[i + 'A'];
}
#endif
for (size_t i = 0; i < 26; ++i)
{
size_t val = counts[i + 'a'] + counts[i + 'A'];
if (val > 0)
{
printf("%c : %d / %d = %f%%\n", i + 'a', val, total, 100 * ((double)val / (double)total));
}
}
}
gcox@kuten:~> g++ count.cpp -O3 -o count
gcox@kuten:~> time ./count
a : 15704064 / 226951168 = 6.919578%
b : 2637824 / 226951168 = 1.162287%
c : 9543680 / 226951168 = 4.205169%
d : 7528448 / 226951168 = 3.317211%
e : 26427392 / 226951168 = 11.644528%
f : 5808128 / 226951168 = 2.559197%
g : 4300800 / 226951168 = 1.895033%
h : 8675328 / 226951168 = 3.822553%
i : 17743872 / 226951168 = 7.818366%
j : 229376 / 226951168 = 0.101068%
k : 1449984 / 226951168 = 0.638897%
l : 7708672 / 226951168 = 3.396621%
m : 5373952 / 226951168 = 2.367889%
n : 15581184 / 226951168 = 6.865435%
o : 21291008 / 226951168 = 9.381317%
p : 6356992 / 226951168 = 2.801040%
q : 286720 / 226951168 = 0.126336%
r : 17850368 / 226951168 = 7.865290%
s : 13762560 / 226951168 = 6.064106%
t : 20021248 / 226951168 = 8.821831%
u : 6750208 / 226951168 = 2.974300%
v : 2678784 / 226951168 = 1.180335%
w : 3399680 / 226951168 = 1.497979%
x : 458752 / 226951168 = 0.202137%
y : 5292032 / 226951168 = 2.331793%
z : 90112 / 226951168 = 0.039705%
real 0m0.412s
user 0m0.204s
sys 0m0.204s