2

所以我创建了一个包含一堆单词的文件,我的程序应该打开文件,将所有单词放入一个数组中,然后比较字符串以查看是否有完全匹配的字符串。它打开文件并填充数组,但是当我尝试比较字符串时问题就来了。谁能告诉我如何解决为什么这不能正确比较?

我的话文件:

Google Twitter Facebook Twitter gmail Flyer city 
phone Google cookie Facebook Flyer grill fork silver tornado dirty 
blue grill lemon

代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void) 
{ 
    FILE *words; 
    char words_array[20][17];
    int x=0; 
    int y=0;
    int pairs = 0;
    words=fopen("words.dat","r"); 
    if(words==NULL) 
        printf("\n\nwords.dat was not properly opened.\n");
      else
        {
                 for(x = 0 ; x < 20 ; x++ ) 
                 { 
            fscanf(words,"%s",&words_array[x][y]); 
                 } 
                 fclose(words); 
                         for(x = 0 ; x < 20 ; x++ )
                       printf("Word #%d is %s \n", x + 1, words_array[x]); 

            /*start of comparison*/

                for(x=0;x<20;x++)
                        {
              for(y=0;y<20;y++)
                           {
            if (strcmp (words_array[x], words_array[x+1])==0)
                pairs++;
                       }
                /*end of comparisons*/
                         }
                printf("%d \n",pairs);


        }
    return(0); 
} 

输出:

Word #1 is Google 
Word #2 is Twitter 
Word #3 is Facebook 
Word #4 is Twitter 
Word #5 is gmail 
Word #6 is Flyer 
Word #7 is city 
Word #8 is phone 
Word #9 is Google 
Word #10 is cookie 
Word #11 is Facebook 
Word #12 is Flyer 
Word #13 is grill 
Word #14 is fork 
Word #15 is silver 
Word #16 is tornado 
Word #17 is dirty 
Word #18 is blue 
Word #19 is grill 
Word #20 is lemon 
0 
4

1 回答 1

3

您只是将当前行与下一行进行比较。使用 strcmp 将循环更改为:

for(x=0; x<20; x++) {
    for(y=x+1; y<20; y++) {
        if (strcmp (words_array[x], words_array[y])==0)
            pairs++;
    }   
}

这将在您的示例数据中找到五对:

 Google
 Twitter
 Facebook
 Flyer
 grill

20附带说明一下,您可能希望在程序开头(在#includes 和 main 之间)为行数添加一个定义的常量,因此如果您想更改行数,则不必替换所有位置阅读(当然对于字长也可以这样说):

#define MAXLINES 20
#define MAXLENGTH 17

然后你可以在你现在有 20 和 17 的任何地方使用这些常量。

于 2013-11-11T20:49:44.620 回答