我正在学习 c 编程,为了锻炼我找到了一个要解决的任务。这就像一个游戏,有人选择一个单词,其他人猜字母。我必须检查有多少给定的单词可以是所选单词的正确答案。
输入:
3 3 // numbers n 和 m n-要比较的单词数,m-检查的字母数
ACD // m 个字母,以空格分隔
--CA // 用于猜测的单词
KUCA // 在这种情况下要检查 n 个单词是否匹配 "--CA"
ZGRADA // 单词由 enter(\n) 分隔
MACA // 在这种情况下,“MACA”与“--CA”不匹配,因为在猜测的字母中有一个“A”,但在第二个破折号上没有表示某些字母
输出:1
想法是检查长度是否相同,如果是,则应检查当前字符是否为“-”,如果是,则应检查 m 个字符(猜测的字母)中的每一个是否与当前字符匹配,如果是,则 rez--;(sol- -;)(之前被声明为 rez=n;)
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n=0,i=0,m=0,j=0,k=0,duzina=0,rez=0,br=0;
char slova[26], rec[30], pot[30],c;
scanf("%d %d\n",&n,&m);
br = 0;
while ( (c = getchar()) != '\n' ){
if ( c != ' ' ) { slova[br] = c; br++; }
}
slova[br] = '\0';
br = 0;
while ( (c = getchar()) != '\n' ){
rec[br] = c;
br++;
}
rec[br] = '\0';
rez=n;
duzina=strlen(rec);
for(i=0;i<n;i++){
br=0;
while ( (c = getchar()) != '\n' ){
pot[br] = c;
br++;
}
pot[br] = '\0';
if(duzina!=strlen(pot))
rez--;
else{
for(j=0;j<duzina;j++){
if(rec[j]=='-'){
for(k=0;k<m;k++){
if(pot[j]==slova[k]){
rez--;
break;
}
}
}
else{
if(rec[j]!=pot[j])
rez--;
}
}
}
}
printf("%d",rez);
return 0;
}
所以我的问题是错误的答案,我不知道为什么。
代码例如上面的例子,但对于这个它显示-8,它应该是3:
10 5
AILBX
--A--AB-X
PUAQFABHX
IIAFWABIX
MHAKVABPX
BQAXWABWX
特奥阿布
PCALIABLX
雷海克
NWNKSGBNP
ZOCZKJWZR
ROAJRABZX