Share Pastebin
Guest
Public paste!

Graham

By: a guest | Jun 12th, 2009 | Syntax: C++ | Size: 2.21 KB | Hits: 77 | Expires: Never
Copy text to clipboard
  1. gcox@kuten:~> cat count.cpp
  2. #include <stdio.h>
  3. #include <vector>
  4.  
  5. int main(void)
  6. {
  7.         char * buffer = new char[10240];
  8.         size_t read;
  9.         size_t counts[256];
  10.         size_t total = 0;
  11.         memset(&counts, 0, sizeof(size_t) * 256);
  12.         FILE* fle = fopen("./LetterFrequencyInput.txt", "r");
  13.         while ((read = fread(buffer, 1, 10240, fle)) > 0)
  14.         {
  15.                 while (read > 0)
  16.                 {
  17.                         char val = buffer[--read];
  18.                         ++counts[val];
  19. #ifdef WHOLE_FILE
  20.                         ++total;
  21. #endif
  22.                 }
  23.         }
  24.         delete[] buffer;
  25.         fclose(fle);
  26. #ifndef WHOLE_FILE
  27.         for (size_t i = 0; i < 26; ++i)
  28.         {
  29.                 total += counts[i + 'a'] + counts[i + 'A'];
  30.         }
  31. #endif
  32.         for (size_t i = 0; i < 26; ++i)
  33.         {
  34.                 size_t val = counts[i + 'a'] + counts[i + 'A'];
  35.                 if (val > 0)
  36.                 {
  37.                         printf("%c : %d / %d =  %f%%\n", i + 'a', val, total, 100 * ((double)val / (double)total));
  38.                 }
  39.         }
  40. }
  41. gcox@kuten:~> g++ count.cpp -O3 -o count
  42. gcox@kuten:~> time ./count
  43. a : 15704064 / 226951168 =  6.919578%
  44. b : 2637824 / 226951168 =  1.162287%
  45. c : 9543680 / 226951168 =  4.205169%
  46. d : 7528448 / 226951168 =  3.317211%
  47. e : 26427392 / 226951168 =  11.644528%
  48. f : 5808128 / 226951168 =  2.559197%
  49. g : 4300800 / 226951168 =  1.895033%
  50. h : 8675328 / 226951168 =  3.822553%
  51. i : 17743872 / 226951168 =  7.818366%
  52. j : 229376 / 226951168 =  0.101068%
  53. k : 1449984 / 226951168 =  0.638897%
  54. l : 7708672 / 226951168 =  3.396621%
  55. m : 5373952 / 226951168 =  2.367889%
  56. n : 15581184 / 226951168 =  6.865435%
  57. o : 21291008 / 226951168 =  9.381317%
  58. p : 6356992 / 226951168 =  2.801040%
  59. q : 286720 / 226951168 =  0.126336%
  60. r : 17850368 / 226951168 =  7.865290%
  61. s : 13762560 / 226951168 =  6.064106%
  62. t : 20021248 / 226951168 =  8.821831%
  63. u : 6750208 / 226951168 =  2.974300%
  64. v : 2678784 / 226951168 =  1.180335%
  65. w : 3399680 / 226951168 =  1.497979%
  66. x : 458752 / 226951168 =  0.202137%
  67. y : 5292032 / 226951168 =  2.331793%
  68. z : 90112 / 226951168 =  0.039705%
  69.  
  70. real    0m0.412s
  71. user    0m0.204s
  72. sys     0m0.204s