c ++在另一个std :: string中出现std :: string

时间:2013-07-10 18:28:56

标签: c++ stdstring

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

1 个答案:

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

我尽力将变量翻译成英语,以便英语用户可读。