首先我们要知道一个函数strstr();
函数原型: char * strstr(char * str1,char * str2);
其作用是:返回第一次包含str2的首位字符指针,如果不包含则返回NULL。
详细用法请参考:strstr函数用法小结
有了这个函数我们就可以快速找到子串第一次出现在主串里面的位置,但这也只是知道第一次出现的位置而已,如何找到所以的情况呢?
很简单!!我们知道,strstr函数是返回子串第一次出现位置的指针,我们只需将该指针想后移动strlen(str2)个字符,便可以再次用strstr函数寻找子串出现的第二次位置了,直到遍历完整个主串或者主串里面没有子串了。
代码如下:
#include<stdio.h>
#include<string.h>
int main(){
char a[100],b[100]; //a记录主串,b记录子串
printf("请输入主串:");
gets(a);
printf("请输入子串:");
gets(b);
int count=0; //count记录出现次数
char *pa=a,*pb=b; //pa,pb分别为数组a,b的指针
while(pa!=NULL){
pa=strstr(pa,pb); //str返回NULL或子串在主串第一次出现的位置
if(pa!=NULL){ //pa!=null说明在主串中找到了子串的位置
pa=pa+strlen(b); //跳过该次子串
count++;
}
}
printf("子串出现次数为%d",count);
return 0;
}
over