Finding a substring of multiple occurences in a string [C++]
string, substring
Solution
#include <string>
#include <iostream>
int Count( const std::string & str,
const std::string & obj ) {
int n = 0;
std::string ::size_type pos = 0;
while( (pos = obj.find( str, pos ))
!= std::string::npos ) {
n++;
pos += str.size();
}
return n;
}
int main() {
std::string s = "How do you do at ou";
int n = Count( "ou", s );
std::cout << n << std::endl;
}
Problem
is there any STL algorithm or a standard way of finding how many occurences of particular substring are there in a string? For example in string: ``` 'How do you do at ou' ``` the string "ou" appears twice. I tried some STL algorithms with and without predicates but what I found is that those algorithms from STL want to compare components of string which in my case is char but cannot? compare substrings. I come up with something like this: str - string obj - substring we're looking for ``` std::string::size_type count_subs(const std::string& str, const std::string& obj) { std::string::const_iterator beg = str.begin(); std::string::const_iterator end = str.end(); std::string::size_type count = 0; while ((beg + (obj.size() - 1)) != end) { std::string tmp(beg, beg + obj.size()); if (tmp == obj) { ++count; } ++beg; } return count; } ``` thank you.