我试图编写一个函数来解析从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}}并在搜索我的答案时结束在线,他们在做什么,我不是?
答案 0 :(得分:1)
好吧,toFind
是std::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;
}
这不是最优雅的事情,但它应该能满足你的需求。