2012-05-05 6 views
-1

Я застрял и обыскал на протяжении всего этого дня. Мне нужно создать частотную программу слов, используя C. Для отслеживания коллизий я использую связанный список, но мой код не дает правильной частоты (например, frequncy из «the» должно быть 25, а вместо этого - 18). Что я делаю не так?. Вот мой код:Частота слов с использованием программирования C и Linked-List, но частота отсчета ошибочна

void addToArr(char *str, HASH_ARR_ELEM hashArr[]){ 
int homeAddress = 0; 
int addResult = 0; 
WORD *tempWord; 
homeAddress = hashFunct(str); 

if(!(tempWord = (WORD*)malloc(sizeof(WORD)))) 
    printf("Memory Allocation Error\n"), 
     exit(100); 

strcpy(tempWord->str,str); 
tempWord->count = 1; 

if(hashArr[homeAddress].wordPtr == NULL){ 
    // allocate memory 
    if(!(hashArr[homeAddress].wordPtr = (WORD*)malloc(sizeof(WORD)))) 
     printf("Memory Allocation Error\n"), exit(100); 

    strcpy(hashArr[homeAddress].wordPtr->str,tempWord->str); 
    hashArr[homeAddress].wordPtr->count = 1; 

} else if(hashArr[homeAddress].wordPtr != NULL && hashArr[homeAddress].headPtr == NULL){   

    if(strcmp(hashArr[homeAddress].wordPtr->str,tempWord->str)) 
     hashArr[homeAddress].wordPtr->count++; 
    else{ 
     hashArr[homeAddress].headPtr = createList(cmpWord); 
     if(!hashArr[homeAddress].headPtr) 
      printf("\aCannot create list\n"), 
      exit(100); 

     addNode(hashArr[homeAddress].headPtr,tempWord); 
     } 
}else 
    if(strcmp(hashArr[homeAddress].wordPtr->str,tempWord->str)) 
     hashArr[homeAddress].wordPtr->count++; 
    else 
    { 
     addResult = addNode(hashArr[homeAddress].headPtr,tempWord); 
     if(addResult != 0) 
      if(addResult == -1) 
       printf("Memory Overflow adding node\n"), 
        exit(120); 
      else 
      { 
       retrieveNode(hashArr[homeAddress].headPtr,tempWord,(void**)&tempWord); 
       tempWord->count++; 
        printf("%s %d\n\n", tempWord->str, tempWord->count); 
      } 
    } 
} // end addToArr 

ответ

2

По крайней мере, одна из ваших проблем находится в строке сравнения строк.

strcmp возвращает 0, если две строки равны, что означает, что вы увеличиваете количество отсчетов только тогда, когда строки различны.

+0

проблема решена! Спасибо – TheMadKoder

0

Если я правильно читаю это, вы ожидаете, что если (strcmp (...)) истинно, если строки равны. Но он возвращает 0, если строки равны.

Так что:

if(strcmp(hashArr[homeAddress].wordPtr->str,tempWord->str)) 

Должно быть так:

if(!strcmp(hashArr[homeAddress].wordPtr->str,tempWord->str)) 

зЬгстр покажет вам позицию первой разности, так что любое число больше нуля будет разница, так 0 - это все, что осталось для равных строк.

+0

проблема решена спасибо! – TheMadKoder

 Смежные вопросы

  • Нет связанных вопросов^_^