求子串在母串中出现的次数(C++)
Posted ଳxin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求子串在母串中出现的次数(C++)相关的知识,希望对你有一定的参考价值。
问题描述:
求一个子串在母串中出现的次数。
(1)思路:
1.用一个外循环,来遍历母串。
2.指定两个指针p、q分别指向子串的首地址和母串的首地址;
3.如果*p==q,则 p++;q++;
否则
母串首地址向后移动一个位置;
用break跳出比较内循环;
4.判断q==‘\\0’,如果是则:计数器++
5.跳出外循环
(2)详细代码:
//C++
#include<conio.h>
#include<string.h>
#include<iostream>
#define M 81
using namespace std;
//fun()函数,ss代表母串,s代表子串.
int fun(char *ss,char *s)
int count=0;
char *p,*q;
while(*ss!='\\0')
p=ss; //p指向ss首地址
q=s; //q指向s首地址
while(*s!='\\0')
if(*p==*q)
p++;
q++;
else
ss++; //此处需注意,当字符比较不相等时,则需要将ss的地址向后移动一个。
break;
if(*q=='\\0')
count++;
return count;
int main()
char a[M],s[M];
gets(a);
gets(s);
int n=fun(a,s);
cout<<n<<endl;
return 0;
(3)注:
1.gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以“回车”标志读取结束。
2.fun(*ss,*s)的第二种写法(参考):
int fun(char *ss, char *s)
int i, j, k, count= 0;
for(i = 0; ss[i] != '\\0'; i++)
for(j = i, k = 0; s[k] == ss[j] && s[j] != '\\0' ; k++,j++ )
if(substr[k+1] == '\\0') //s中的每一个字符拿去比较,此时意思是已经比较到s的最后一个字符(因为最后一个字符的后一个是'\\0')
num++;
return count;
(4)结果验证:
以上是关于求子串在母串中出现的次数(C++)的主要内容,如果未能解决你的问题,请参考以下文章