用特殊字符搜索C++ std :: string
问题描述:
我从HTML请求中得到一个很长的字符串。我需要在其中找到以下子字符串:用特殊字符搜索C++ std :: string
<b><i>
但是,当我试图搜索它时给了我错误的结果。
如果我用一些东西替换字符串,不包含<或>它完美地工作。
相关代码: (不复制,可能有一些错别字,但没有特殊字符的作品)
std::string readBuffer; //longlongstring
std::string starttag;
std::string endtag;
size_t sstart;
size_t send;
//...................
sstart=readBuffer.find(starttag);
send=redBuffer.find(endtag);
correction=readBuffer.substr(sstart,send-sstart);
//....................
所以是的,如果有人碰巧知道一个方法来解决这个问题,我会非常有感激:) 预先感谢
答
这按预期工作:
#include <cassert>
#include <string>
int main(int,char**)
{
std::string data = "...<b><i>Berlin</b></i>";
size_t sstart = data.find("<b><i>")+6;
size_t send = data.find("</b></i>");
std::string correction = data.substr(sstart,send-sstart);
assert(correction=="Berlin");
return 0;
}
如果你创建这样一个小的完整的例子,但是如果发生故障,那么确定问题的原因就容易多了。
您可以通过将'sstart'设置为搜索的开始位置来更加有效地搜索结束标记:'send = readBuffer.find(endtag,sstart);'。 – 2013-03-10 15:41:16
至于你的问题,如果你告诉实际结果是什么,以及你期望他们是什么,这将有助于我们帮助我们。请提供具有实际和预期结果的完整示例。 – 2013-03-10 15:43:04
结果是-1和-1。预期结果是开始和结束标记之间的词。 例如: 如果我有这个字符串: ... 柏林 STARTTAG是 和 ENDTAG是 我希望得到 “柏林” 的结果。 它工作,如果我使用字符串没有特殊的字符而不是 – Y0UR 2013-03-10 15:44:20