C++中find_last_of处理XML字符串失效问题排查
问题分析与解决方案
哦,我明白你遇到的问题了——你用错函数啦!find_last_of根本不是用来查找完整子串最后出现位置的工具,这就是它返回奇怪数值的原因。
为什么find_last_of失效?
std::string::find_last_of的作用是:在字符串中查找参数里任意单个字符最后出现的位置,而不是查找整个子串的最后出现点。比如你传入"ChildTag",它会在fileData里找C、h、i、l、d、T、a、g这些字符中最后出现的那个的位置,这完全不是你想要的“最后一个完整的ChildTag子串”的位置,自然会返回和预期无关的数值。
正确的解决方案
要查找完整子串最后一次出现的位置,你需要用std::string::rfind函数,它专门做这个事情。
修改你代码中出错的那一行:
// 替换原来的find_last_of为rfind auto childxmlindex = fileData.rfind("ChildTag");
另外,最好加上一个判断,确保找到了目标子串再进行截取,避免出现错误:
if (childxmlindex != std::string::npos) { std::cout << "Child XML : " << fileData.substr(childxmlindex) << std::endl; } else { std::cout << "未找到ChildTag子串" << std::endl; }
验证逻辑
你的XML内容里有两处ChildTag:一处是模板中的{{ChildTag}},另一处是后面的纯文本ChildTag。rfind会准确找到后者的起始位置,这样截取出来的子串就是你需要的最后一个ChildTag对应的XML部分。
内容的提问来源于stack exchange,提问作者PapaDiHatti
相关产品推荐
相关产品推荐

