gpt4 book ai didi

遍历列表元素时的 C 问题

转载 作者:行者123 更新时间:2023-11-30 15:39:35 25 4
gpt4 key购买 nike

我在 C 语言的小程序中遇到了一个问题,我真的非常需要你的帮助。 90%的代码都可以完美运行,因为我检查了多次,问题出在最后几行,我不知道如何修复它。我仍然只是一个初学者,所以可能在某个地方存在一个非常基本的错误。

我的程序将 txt 文件中的所有单词放入列表中 [已检查,工作正常]。用户键入关键字。在关键字中可以使用“?”代替某些字母表示任意随机字母,“*”表示末尾任意数量的字母,[x,y,z] 表示字母可以是 x、y 或 z,然后程序检查列表中是否有任何单词匹配。检查所有这些条件的函数也工作得很好[我检查了一些随机单词],但不知怎的,当我试图让它检查列表中的所有单词并打印匹配的单词时,我失败了。如果有人能帮助我解决这个问题,我将不胜感激。

代码如下:

typedef struct bazaslowek                                    // structure
{
char *wordlist;
struct bazaslowek* next;
} baza;

int MatchWord(char *Word, char *Sequence) //function, here works everything

{int i = 0;
int j = 0;
int k = 0;
int LastChar = 0;
int CharMatch = 0;
char SpecifiedChars[20];

while(Word[i]!='\0' && Sequence[j]!='\0')
{if(isalpha(Sequence[j]))
{if(Word[i]!=Sequence[j])
{return 0;}
i++;
j++;
}
if(Sequence[j] == '?')
{i++;
j++;}
if(Sequence[j] == '[')
{j++;
while(Sequence[j]!= ']')
{if(isalpha(Sequence[j]))
{SpecifiedChars[LastChar] = Sequence[j];
LastChar++;
j++;}
else
{ j++;}
}
j++;
for(k = 0 ; k <= LastChar ;k++)
{if(SpecifiedChars[k]==Word[i])
{CharMatch = 1;}
SpecifiedChars[k] = ' ';}
SpecifiedChars[0] = '\0';
LastChar = 0;
if(!CharMatch)
{return 0;}
i++;
}
if(Sequence[j] == '*')
{ j++;
while(Word[i]!='\0')
{ i++;}
}
}
return 1;
}





int main()


{ //============================== txt file -> list, works fine

baza *head = NULL;
char wordlist[30];
FILE *fp;
if ((fp = fopen("bazaslow.txt", "r"))==NULL)
{printf("Error while opening!");
exit(EXIT_FAILURE);}
else
{
while(!feof(fp))
{
fscanf(fp,"%s\n", wordlist);
baza *wsk = head;
baza *new = malloc (sizeof(baza));
new -> next = NULL;
new -> wordlist = strdup(wordlist);
if(wsk == NULL)
{
new -> next = head;
head = new;
}
else
{
while(wsk -> next != NULL)
wsk = wsk -> next;
wsk -> next = new;
}
}
}
fclose(fp);


//=============================HERE THE PROBLEM STARTS

char word[30], keyword[30];
printf("Type the keyword: \n");
scanf("%s", keyword);
baza *wskx = head;
while (wskx != NULL)
{wskx->wordlist=word;
printf("%s\n", wskx->wordlist);
if(MatchWord(word,keyword))
{printf("\n%s", wskx->wordlist);}
wskx=wskx->next;}
return 0;
}

使用这段代码,它会打印出很多行一些随机字母和字符,这些字母和字符甚至不在列表中,每次它们都不同。我真的非常需要你的帮助,我已经尝试解决这个问题很长时间了,但每次我都失败了。

最佳答案

你的分配是错误的。而不是

wskx->wordlist=word;

你应该这样做

word=wskx->wordlist;

关于遍历列表元素时的 C 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21366710/

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