我正在尝试将独特的单词从 .txt 文件复制到链接列表。我需要复制每个唯一的单词一次,不要重复。我写了一个程序,但是我的函数有问题,该函数检查单词是否已经存在于列表中。下面是从文件中读取单词并将单词添加到链接列表(如果尚未添加)的代码片段。
FILE*fd;
fd=fopen("c:\\texto.txt","r");
while(!feof(fd))
{
fscanf(fd,"%s",aux);
if(check(&lista,aux)==1){
add(&lista,aux);}
}
我对check
函数的想法是:检查我从文件中得到的实际单词是否与链表中当前节点中已有的单词相同。如果当前节点不存在,则转到下一个节点。如果函数发现这个词已经在链表中,则返回0。如果函数到达链表的末尾,则返回1,以便main可以将这个词添加到链表中。
int check (t_nodo*lista, char*aux)
{
if((*lista)!=NULL&&strcmp(((*lista)->word,aux))!=0)
{
check(&(*lista)->next,aux);
}
if((((*lista)->word,aux))==0)
{
return 0;
}
if((*lista)==NULL)
{
return 1;
}
}//el tano se la come a mordiscones
实际上,程序只是将第一个单词复制到列表中。然后它将所有其他节点的词设置为与第一个词相同。我已经检查了“添加”功能,没问题。
最佳答案
您在列表中更深入但未返回值。修复:
if((*lista)==NULL)
{
return 1;
}
if(strcmp(((*lista)->word,aux))!=0)
{
return check(&(*lista)->next,aux);
}
return 0;
还可以考虑使用 while 循环而不是递归。
关于将 .txt 文件中的唯一词复制到链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209142/