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