2014-01-26 34 views
0

我在C程序中遇到了一个问题,我确实需要你的帮助。 90%的代码完美工作,因为我检查了多次,问题在最后几行,我无法弄清楚如何解决它。我仍然只是一个初学者,所以在某个地方可能有一个非常基本的错误。当遇到列表元素时出现C问题

我的程序把txt文件中的所有单词放在列表中[checked,works fine]。用户键入关键字。在关键字中可以使用一些字母'?'意思是任何随机字母,'*'表示任意数量的字母在末尾,[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; 
} 

有了这个代码,它用printfs我很多的一些随机字母和字符,甚至没有在列表中,每次他们是不同的时间线。我真的很需要你的帮助,我试图弄清楚这个问题已经很久了,但是每次我都失败了。

+0

你正在改变你的单词列表 – Nullpointer

回答

0

它应该是这样的:

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

您的任务是错误的。取而代之的

wskx->wordlist=word; 

你应该做的

word=wskx->wordlist; 
+0

字是一个数组。您需要使用strcpy或将其作为指针。或者你可以完全摆脱它,因为它不需要。 – ooga

相关问题