查找字串位置,输入两个字符串,a,b查找b是否为a的字串,输出b在a中出现的位置,不是的话输出-1

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int i,j,count,len1,len2,k,jishu=0;
char f[50],c[50];
while(scanf("%s",f)!=EOF)
{
scanf("%s",c);
len1=strlen(f);
len2=strlen(c);
for(i=0;i<len1;i++)
{
count=0;
k=i;
for(j=0;j<len2;j++)
{
if(f[k]==c[j])
{
count++;
if(count==len2)
{
printf("%d ",k-1);
jishu++;
}
else k++;
}
}
}
if(jishu==0)
{
printf("-1");
}
printf("\n");
jishu=0;
k=0;
len1=0;len2=0;
}
return 0;
}
多组输入时,第一组正确,第二组的位置输出不对每个位置的数字都多1

经过测试,发现把判断是否包含子串的if(count==len2)那一段移到第一个for循环后面,再把打印起始坐标的k改为i即可,修改如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    //  https://ask.csdn.net/questions/7856287?spm=1005.2025.3001.5141
    int i,j,count,len1,len2,k,jishu=0;
    char f[50],c[50];
    while(scanf("%s",f)!=EOF)
    {
        scanf("%s",c);
    //    printf("f=%s,c=%s\n",f,c); 
        len1=strlen(f);
        len2=strlen(c);
        for(i=0;i<len1;i++)
        {
            count=0;
            k=i;
            for(j=0;j<len2&&k<len1;j++)
            {
                if(f[k]==c[j])
                {
                    count++;
                    
                }
                k++;
            }
            if(count==len2)
            {
                printf("%d ",i);
                jishu++;
            }
        }
        if(jishu==0)
        {
            printf("-1");
        }
        printf("\n");
        jishu=0;
        k=0;
        len1=0;len2=0;
    }
    return 0;
}

img


int main()
{
    int i, j, count, len1, len2, k, jishu = 0;
    char f[50], c[50];
    while (scanf("%s", f) != EOF)
    {
        jishu = 0; //
        scanf("%s", c);
        len1 = strlen(f);
        len2 = strlen(c);
        for (i = 0; i < len1; i++)
        {
            count = 0;
            k = i;
            for (j = 0; j < len2 && k < len1; j++) //
            {
                if (f[k] == c[j])
                {
                    count++;
                    if (count == len2)
                    {
                        printf("%d ", i);//k - 1
                        jishu++;
                    }
                    else
                        k++;
                }
                else
                    break; //
            }
        }
        if (jishu == 0)
        {
            printf("-1");
        }
        printf("\n");
        // jishu = 0;
        // k = 0;
        // len1 = 0;
        // len2 = 0;
    }
    return 0;
}

参考:https://ask.csdn.net/questions/7698016