fork download
  1. // 165 名前: デフォルトの名無しさん Mail: sage 投稿日: 2012/12/11(火) 11:07:17.44
  2. // よろしくお願いします。
  3.  
  4. // [1] 授業単元: Programming C
  5. // [2] 問題文(含コード&リンク):
  6. // 1. argv[1]を使って wordlist(txtファイル) を読み込み、Hashtableに格納。
  7. // サンプルtxtファイル -> http://s...content-available-to-author-only...s.jp/~c_cpp_homework/cgi-bin/joyful/joyful.cgi の 386.txt, 387.txt
  8.  
  9. // ※二重ハッシュ法を使う
  10. // ※アポストロフィや .等を含んでいた場合、別の単語として扱う。ただ大文字小文字は区別しない。
  11. // 例) grindstone’s と grindstones は別の単語。Armour と armour は同じ単語として扱う。
  12. // ※単語数の約二倍のサイズのHashTableと素数を使う。ただ、単語数はファイル読み込み事前にはわからないものとする。
  13. // ※単語の長さの最大値をあらかじめ決め打ちしない。
  14.  
  15. // 2.
  16. // ・それぞれのセルでアクセスされた回数をカウントしていき、表示する。
  17.  
  18. // [3] 環境
  19. //  [3.1] Cent OS
  20. //  [3.2] gcc
  21. //  [3.3] C
  22. // [4] 2012年12月12日
  23. // [5] その他の制限:
  24. // ・グローバル変数を使わない
  25.  
  26. #include <stdio.h>
  27. #include <stdlib.h>
  28. #include <string.h>
  29. #include <ctype.h>
  30.  
  31. // prototype
  32. int h(char *);
  33. int p(char *);
  34.  
  35. int h(char *s)
  36. {
  37. int r = 0;
  38. while (*s) {
  39. *s = tolower(*s);
  40. r = r * 26 + (*s - 'a');
  41. r %= 11;
  42. ++s;
  43. }
  44. return r;
  45. }
  46.  
  47. int p(char *s){
  48.  
  49. }
  50.  
  51. int main(int argc, char const *argv[])
  52. {
  53. FILE *fp;
  54. int hashTableSize, len = 0, lenMax = 0;
  55. char c, **hashTable, *buf;
  56.  
  57. // 単語数カウント
  58. fp = fopen(argv[1], "r");
  59. while ((c = fgetc(fp)) != EOF) {
  60. if (c == '\n') {
  61. ++hashTableSize;
  62. if (lenMax < len)
  63. lenMax = len;
  64. len = 0;
  65. } else ++len;
  66. }
  67.  
  68. // HashTableサイズ決め
  69. {
  70. int n;
  71. hashTableSize *= 2;
  72. while (1) {
  73. for (n = 2; (n * n < hashTableSize) && (hashTableSize % n); ++n);
  74. if (hashTableSize % n) /* 素数 */
  75. break;
  76. ++hashTableSize;
  77. }
  78. }
  79. printf("hashTableSize = %d\n", hashTableSize);
  80. printf("lenMax = %d\n", lenMax);
  81. hashTable = (char **)malloc(sizeof(char *)*hashTableSize);
  82. buf = (char *)malloc(sizeof(char ) * (lenMax + 2));
  83.  
  84. rewind(fp);
  85. while ((fgets(buf, lenMax, fp)) != NULL)
  86. {
  87. h(buf, hashTableSize);
  88. }
  89.  
  90. return 0;
  91. }
  92.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c: In function ‘main’:
prog.c:87: error: too many arguments to function ‘h’
stdout
Standard output is empty