我要打印所有单词及其文本文件的计数。当它第二次读取相同的单词时,它输出数字零。我无法弄清楚如何输出正确的值。例如,如果它发现“和”它将打印“和: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);
}
}
答案 0 :(得分:0)
从哈希表中获取的值是指向具有单个整数的内存块的指针。然后你增加指针,这使它指向未初始化的内存,它恰好在其中有一个零。您可能希望增加整数值,而不是指针。
答案 1 :(得分:0)
Value是指向int的指针。您不希望增加指针,而是增加指向的int。将值++更改为(* value)++。