gpt4 book ai didi

c++ - std::count over variable string 计数变量字符串

转载 作者:行者123 更新时间:2023-11-28 06:48:48 27 4
gpt4 key购买 nike

我正在尝试编写一个函数来解析从 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++)

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

但是当我按原样使用 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::countstd::string::begin 并在搜索我的答案时在线结束,他们在做什么而我没有?

最佳答案

好吧,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;
}

这不是最优雅的东西,但它应该能满足您的需求。

关于c++ - std::count over variable string 计数变量字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24455358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com