试图比较2d数组中的字符串

时间:2013-11-11 20:28:31

标签: c arrays string strcmp

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

我的文件:

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 

1 个答案:

答案 0 :(得分: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

在旁注中,您可能希望为程序开头的行数(#includes和main之间)添加已定义的常量,这样您就不必在任何地方替换20。你想改变读取的行数(当然,对于单词长度也可以这样说):

#define MAXLINES 20
#define MAXLENGTH 17

然后你可以在现有的20和17处使用这些常量。