std :: count在变量字符串计数变量字符串上

时间:2014-06-27 15:21:16

标签: c++ string std

我试图编写一个函数来解析从api返回给我的xml,返回的数据非常多变,所以我需要确保这个函数在所有情况下都能正常工作。

这是我的错误正在发生的函数的开始(我相信)

using namespace std;
vector<string> grabXMLVals(string xmlString, string toFind){
    vector<string> values;
    int amount = (int)count(xmlString.begin(), xmlString.end(), &toFind); 
    for (int i = 0; i < amount; i++)

我想计算在xmlString中出现toFind字符串的次数,以了解我的循环需要运行多少次。

但是当我使用count语句编译时,我得到:

Error   1   error C2446: '==' : no conversion from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> ' to 'int'  C:\Program Files\Microsoft Visual Studio 12.0\VC\include\xutility   3078    

不确定哪个参数不满意,相当不确定它不是第三个因为如果我给出一个硬编码常量它仍然不高兴,但我发现很多人使用std::count和{ {1}}并在搜索我的答案时结束在线,他们在做什么,我不是?

1 个答案:

答案 0 :(得分:1)

好吧,toFindstd::string&toFind获取其地址。所以你正在做的是:

std::string const* addr = &toFind;
std::find (xmlString.begin(), xmlString.end(), addr); 

所以你试图在std::string内找到一个不起作用的指针。

你想要的是这样的:

std::size_t count_substr(std::string const& str, std::string const& toFind)
{
    std::size_t count = 0;
    std::size_t pos = 0;

    while(pos != std::string::npos)
    {
        pos = str.find (toFind, pos);

        if (pos != std::string::npos)
        {
            /* increment the count */            
            count++;

            /* skip the instance of the string we just found */
            pos++;
        }
    }

    return count;
}

这不是最优雅的事情,但它应该能满足你的需求。