gpt4 book ai didi

c - 使用C编程和链表的词频但频率计数错误

转载 作者:行者123 更新时间:2023-11-30 18:59:31 25 4
gpt4 key购买 nike

我花了几天时间在这件事上陷入困境并进行了搜索。我需要使用 C 创建一个词频程序。为了跟踪冲突,我使用了链接列表,但我的代码没有给出正确的频率(例如,“the”的频率应该是 25,但它是 18)。我究竟做错了什么?。这是我的代码:

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

最佳答案

您的问题至少之一是在字符串比较行中。

如果两个字符串相等,

strcmp 返回 0,这意味着仅当字符串不同时才递增计数。

关于c - 使用C编程和链表的词频但频率计数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com