用户给我们一个较长的字符串s和一个较短的字符串t
如果ts中,其中字符串?中的符号t可以用作任何字符,则显示一条消息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int isit(char*,char*,int);
int main()
{
    char s[20],t[20];
    int k,i,fir;
    puts("Enter first string");
    gets(s);
    puts("Enter second string");
    gets(t);

    k=strlen(s)-strlen(t);

    for(i=0;i<=k;i++){
        fir=i;
        if(isit(s,t,fir)==1){
            printf("It's in there");
            return 1;
        }
    }

}
int isit(char*s,char*t,int fir){
    int i;
    for(i=fir;i<i+strlen(t)-1;i++)
        if(t[i]!=s[i] && t[i]!='?')
            return -1;
    return 1;
}

最佳答案

问题出在函数isit()
1)在isit()中检查字符串时。ts的指数必须不同对于s它必须从fir开始,但是对于t它必须从0开始。
2)您不需要在终止条件检查中执行-1,因为您已经在使用<,而不是<=
3)您需要将终止条件更改为i<fir+strlen(t),因为i在每次迭代时都在更改,这将使终止条件失效
将代码更改为

int isit(char*s,char*t,int fir){
    int i, j;
    for(i=fir, j=0; i<fir+strlen(t); i++, j++)
        if(t[j]!=s[i] && t[j]!='?')
            return -1;
    return 1;
    }

10-07 20:27