1

我正在尝试使用以下方法计算另一个 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;
        }

但编译器不喜欢它,这是编译器发出的错误:

错误:'_ first中的 'operator==' 不匹配。_gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* >() == __value'</p>

有什么帮助吗??提前谢谢!

4

1 回答 1

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() 重叠。

为了英文用户的可读性,我尽力将变量翻译成英文。

于 2013-07-10T18:47:40.390 回答