Xml Parser - string :: find

Nor*_* Me 0 c++ string

我试图解析一个包含我的XML文件行的字符串.

std::string temp = "<Album>Underclass Hero</Album>";
int f = temp.find(">");
int l = temp.find("</");
std::string _line = temp.substr(f + 1, l-2);
Run Code Online (Sandbox Code Playgroud)

这是我的函数代码的一部分,它应该实际返回解析后的字符串.我所期待的是它返回Underclass Hero.相反,我得到了Underclass Hero </ Alb
(这里是'<'和'/'之间的空格,因为我无法将它们一起编写).

我看了std :: string :: find几次,它总是说它返回,如果存在,第一个匹配的第一个字符的位置.这里它给了我字符串的最后一个字符,但只在我的变量l中.
f确实很好.

链接到std :: string :: find

所以有人能告诉我我做错了什么吗?

Dan*_*rey 5

substr将长度作为第二个参数,而不是结束位置.尝试:

temp.substr(f + 1, l-f-1);
Run Code Online (Sandbox Code Playgroud)

另外,请考虑使用真正的XML解析器,不要自己尝试或通过其他不适当的方法.


And*_*owl 5

第二个参数采用您要提取的子字符串的长度.您可以通过以下方式修复代码:

#include <string>
#include <iostream>

int main()
{
    std::string temp = "<Album>Underclass Hero</Album>";
    int f = temp.find(">");
    int l = temp.find("</");
    std::string line = temp.substr(f + 1, l - f - 1);   
    //                                    ^^^^^^^^^
}
Run Code Online (Sandbox Code Playgroud)

这是一个实例.

另外,要注意诸如的名称_line.根据C++ 11标准的第17.6.4.3.2/1条:

[...]以下划线开头的每个名称都保留给实现,以用作全局名称空间中的名称.