【STL】 找子串出现的次数

目的:

找出一个字符串中出现某子串的次数。

思路:

主要用的是string容器的find方法,find方法主要是找到字符串中出现某子串的位置。

例如:   

              s1 = "abcdefgh"   

              s2 = "de"   

              s1.find(s2) = 3 

但是如果要求出现的子串的次数,则需要每次查询以后删除查询过的字符。

这里用string容器的erase方法。

例如:  

              s1 = "abcdefgh"   

              s2 = "de"   

              s1.find(s2) = 3 

              s1.erase(0,3+s2.length())                  / / 出现的位置  3   +  子串的长度   2

              s1 = "fgh"                           / /删除了第0个位置到第5个位置之间的字符 (不包括第5个)

#include<iostream>
#include<string>
using namespace std;

int Find_string(string s1,string s2){    //s1为原字符串,s2为要查询的子串 
    int num = 0;    //记录子串的个数 
    while(s1.find(s2)!=-1){     //如果没有找到s2,则返回-1  
    	int pos = s1.find(s2);
    	num++;  
    	s1.erase(0,pos+s2.length());//删除从头到s2位置的字符串,防止下次查询重复(s2.size()也行)
    }  
    return num;
} 

int main(){
	string s1,s2;
	while(cin>>s1>>s2){
		cout<<"该字符串中含有"<<Find_string(s1,s2)<<"个"<<s2<<endl;
	}
	return 0;
}

 

测试:

猜你喜欢

转载自blog.csdn.net/piano_diano/article/details/88768747
STL
今日推荐