问题描述:输入两个字符串,分别称为母串和子串。统计子串在母串中出现的次数和位置。注意子串可以重叠,见输入样例2。
输入说明:输入分为两行,第一行为母串,第二行为子串。母串和子串的长度都不超过100。
输出说明:输出子串在母串中出现的次数,并按出现次序输出每次子串在母串中出现时,子串第一个字符在母串中的位置(位置从0开始计算)。
输入样例1:
12312431235412
123
输入样例2:
12121212
1212
输出样例1:
2 0 7
输出样例2:
3 0 2 4
#include <stdio.h>
#include<string.h>
int main()
{
char str[80],substr[10];
gets(str);
gets(substr);
int i=0,j=0,num=0;
int a[1000]={};
for(i=0;str[i]!='\0';i++) //将母串的每一位与字串对照
{
int k=0;
for(j=i;str[j]== substr[k] && str[j]!='\0';k++,j++)
{
if(substr[k+1]=='\0')//不满足的数就会被当成没有字符对待
{
num++;
break;
}
}
}
printf ("%d",num);
for(i=0;str[i]!='\0';i++)
{
int k=0;
for(j=i;str[j]== substr[k] && str[j]!='\0';k++,j++)
{
if(substr[k+1]=='\0')
{
printf (" %d",i);//输出字符串第一个字符在母串中的位置
break;
}
}
}
return 0;
}
有没有uu有更简便的方法啊。这个输出的次序我真是倒不过来了,所以才重复了两遍。😥😢
|