在不使用string.h库的情况下在字符串中搜索“好”

时间:2018-12-01 11:02:15

标签: c string

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);
    }
}

2 个答案:

答案 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