我尝试使用以下方法计算另一个std :: string中std :: string的发生次数:
static int cantidadSimbolos(const std::string & aLinea/*=aDefaultConstString*/,
const std::string & aSimbolo/*=aDefaultSimbolSeparador*/)
{
if(aSimbolo.empty()) return 0;
if (aLinea.empty()) return 0;
int aResultado=0;
//This is the line that the compiler doesnt like
aResultado=std::count(aLinea.begin(),aLinea.end(),aSimbolo);
return aResultado;
}
但是编译器不喜欢它,这是编译器发出的错误:
错误:不匹配'运营商==' “_ 第一 _gnu_cxx :: __ normal_iterator< _Iterator, _Container> :: operator *>()== __value'
任何帮助? 提前thx!
答案 0 :(得分:3)
以下代码将查找给定字符串的非重叠事件的计数。
using namespace std;
static int countOccurences(const string & line, const string & symbol) {
if (symbol.empty()) return 0;
if (line.empty()) return 0;
int resultCount = 0;
for (size_t offset = line.find(symbol); offset != string::npos;
offset = line.find(symbol, offset + symbol.length()))
{
resultCount++;
}
return resultCount;
}
int main(int argc, const char * argv[])
{
cout << countOccurences("aaabbb","b") << endl;
return 0;
}
find函数将返回一个迭代器到它匹配的值的第一个元素,或返回'last',因此string :: npos。这确保不与offset + symbol.length()重叠。
我尽力将变量翻译成英语,以便英语用户可读。