C语言程序,判断一个字符串是否是另一个字符串的子串,如是则输出第一次出现的位置

2024-11-23 08:46:36
推荐回答(1个)
回答(1):

#include
#include
int iszstr(char *str,char *zstr);//zstr是str的子串 返回出现的位置下标,否则返回-1
int main( )
{
    int renum;
    char str[100],zstr[100];
    while(1)
    {
        str[0]=zstr[0]=0;
        printf("输入母串:");
        scanf("%s",str);
        printf("输入可能的子串:");
        scanf("%s",zstr);
        renum=iszstr(str,zstr);
        if(renum<0)
            printf("不是子串!\n\n");
        else
            printf("是子串,起始位置在下标%d处!\n\n",renum);
    }

    return 0;
}
int iszstr(char *str,char *zstr)
{
    char *p1=str,*p2=NULL,*pSave=NULL,flag;
    while(*p1)
    {
        if(*p1==zstr[0] && strlen(p1)>=strlen(zstr))//先找到对应的首字符位置
        {
            pSave=p1;
            p2=&zstr[0];
            flag=1;
            while(*p2)
            {
                if(*p1!=*p2)
                {
                    flag=0;
                    break;
                }
                p1++;
                p2++;
            }
            if(flag==1)
            {
                return pSave-&str[0];
            }
            else
                p1=pSave;
        }
        p1++;
    }
    return -1;
}