C编程语言。问题集中在函数和递归上。问题只是检查行是否包含“ good”,而不考虑大小写。它编译并匹配样本输出,但是检查软件将其标记为错误。
#include<stdio.h>
#include<stdlib.h>
int checkString(char string[])
{
for(int i = 0; i<80; i++)
{
if(string[i] == 103 || string[i] == 71 && string[i+1] == 111 || string[i+1] == 79 && string[i+2] == 111 || string[i+1] == 79 && string[i+3] == 100 || string[i+1] == 68)
{
return 1;
break;
}
}
}
int goodCheck()
{
char string[80] = {'0'};
fgets(string, 80, stdin);
if(checkString(string)==1)
{
return 3;
}
else
{
return 0;
}
}
int main()
{
int cases = 0;
char string[80];
scanf("%d", &cases);
fflush(stdin);
for(int i = 1; i<=cases; i++)
{
if (goodCheck() == 3)
{
printf("Case #%d: yes\n", i);
}
else
{
printf("Case #%d: no\n", i);
}
}
}
编辑: 这是代码发布的修订版,尽管它仍然被标记为错误,因此评分比以前更好。
#include<stdio.h>
#include<stdlib.h>
int checkString(char string[]);
void goodCheck(int i);
int main()
{
int cases = 0;
char string[80];
scanf("%d\n", &cases);
for(int i = 1; i<=cases; i++)
{
goodCheck(i);
}
}
int checkString(char string[])
{
for(int i = 0; i<80; i++)
{
if((string[i] == 'g' || string[i] == 'G') &&
(string[i+1] == 'o' || string[i+1] == 'O') &&
(string[i+2] == 'o' || string[i+2] == 'O') &&
(string[i+3] == 'd' || string[i+3] == 'D'))
{
return 1;
}
}
}
void goodCheck(int i)
{
char string[80] = {'0'};
fgets(string, 80, stdin);
if(checkString(string)==1)
{
printf("Case #%d: yes\n", i);
}
else
{
printf("Case #%d: no\n", i);
}
}
答案 0 :(得分:0)
&&的运算符优先级高于||。所以您的代码正在检查
string[i] == 'g'
|| (string [i] == 'G' && string [i+1] == 'o')
|| (string [i+1] == 'O' && string [i+2] == 'o')
|| (string [i+2] == 'O' && string [i+3] == 'd')
|| string [i+3] == 'D'
所有以“ g”开头,以“ Go”开头,或包含“ Oo”或“ Od”或以“ D”结尾的子字符串都将通过检查。就像“高飞”会过去,还是“噢,我的天!”。
“ good”的所有变体都可以通过,但是许多不正确的字符串也可以通过。似乎您尚未使用包含一些但不是所有“ good”字符的字符串来测试此字符串。甚至“ Lady Gaga通过测试”也通过了测试(因为只有一个小写的g)。
答案 1 :(得分:0)
字符串搜索问题可以通过有限自动机解决:
npx