Trovare una stringa di più occorrenze di una stringa [C ++]
Domanda
non c'è qualche algoritmo di STL o di un modo standard di trovare quanti avvenimenti di particolare sottostringa sono in una stringa? Per esempio nella stringa:
'How do you do at ou'
la stringa "ou" compare due volte. Ho provato alcuni algoritmi STL con e senza predicati, ma quello che ho trovato è che questi algoritmi da STL vogliono confrontare i componenti di corda, che nel mio caso è char, ma non può? confrontare sottostringhe. Mi viene in mente qualcosa di simile:
str - stringa
obj - sottostringa che stiamo cercando
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;
}
grazie.
Soluzione
#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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow