将子字符串的每一位依次与父字符串对比,如果全部匹配相等,则个数+1,否则跳出子字符串循环,进行符字符串的下一个字符的匹配。特别注意父字符串是每次移动一位,避免1212121这样的字符串计算121的个数出错。
//统计一个字符串中自字符串的个数
#include<iostream>
using namespace std;
int funcount(char *a,char *p);
int main(void)
{
char a[100];
char b[100];
int count=0;
puts("Please enter a fatherString:");
while(gets(a)!=NULL&&a[0]!='\0')
{
puts("Please enter a sonString:");
gets(b);
count=funcount(a,b);//函数的返回值为子字符串的个数
cout<<b<<"共有"<<count<<"个。"<<endl;
count=0;
puts("Please enter a String:");
}
return 0;
}
int funcount(char *a,char *b)
{
int temp;
int count=0;
int j=0;
for(int i=0;i<strlen(a);i++)
{
temp=i;//能够保证字符串a能够是一个一个移位
//避免1212121计算121的个数这样的计算错误
for(j=0;j<strlen(b);)
{
if(a[temp]==b[j])
{
temp++;
j++;
}
else break;
}
if(b[j]=='\0')//如果一直匹配知道字符串结束
count++;
}
return count;
}