#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

查找字串位置,输入两个字符串,a,b查找b是否为a的字串,输出b在a中出现的位置,不是的话输出-1
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- a5156520 2022-12-08 10:27关注
经过测试,发现把判断是否包含子串的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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用