求子串在母串中出现的次数(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)结果验证:

全部评论

相关推荐

点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务