打印所有单词及其计数

时间:2013-05-27 00:04:08

标签: c hashtable

我要打印所有单词及其文本文件的计数。当它第二次读取相同的单词时,它输出数字零。我无法弄清楚如何输出正确的值。例如,如果它发现“和”它将打印“和:1”但是当它再次找到“和”时它会打印“和:0”。

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "hashMap.h"

int main (int argc, const char * argv[]){
   char* word;
   int *value = 0;
   const char* filename;
   struct hashMap *hashTable;   
   int tableSize = 10;
   clock_t timer;
   FILE *fileptr;   
   if(argc == 2)
      filename = argv[1];
   else
      filename = "input1.txt"; /*specify your input text file here*/
   printf("opening file: %s\n", filename);
   fileptr = fopen(filename, "r");
   if(fileptr != 0){
      printf("Open Successfull!\n");
   }
   else{
      printf("Failed to open!\n");
   }
   timer = clock();
   hashTable = createMap(tableSize);       
   /*... concordance code goes here ...*/
   while(1){
      word = getWord(fileptr);
      if(word == NULL){
     break;
      }
      value = (int*)atMap(hashTable, word);
      if(value != NULL){
     value++;
      }
      else{
     value = (int *) malloc(sizeof(int));
     *value = 1;
     insertMap(hashTable, word, value);
      }
      printf("%s:%d\n", word, *value);
   }
}

2 个答案:

答案 0 :(得分:0)

从哈希表中获取的值是指向具有单个整数的内存块的指针。然后你增加指针,这使它指向未初始化的内存,它恰好在其中有一个零。您可能希望增加整数值,而不是指针。

答案 1 :(得分:0)

Value是指向int的指针。您不希望增加指针,而是增加指向的int。将值++更改为(* value)++。