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