用特殊字符搜索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); 

//.................... 

所以是的,如果有人碰巧知道一个方法来解决这个问题,我会非常有感激:) 预先感谢

+0

您可以通过将'sstart'设置为搜索的开始位置来更加有效地搜索结束标记:'send = readBuffer.find(endtag,sstart);'。 – 2013-03-10 15:41:16

+0

至于你的问题,如果你告诉实际结果是什么,以及你期望他们是什么,这将有助于我们帮助我们。请提供具有实际和预期结果的完整示例。 – 2013-03-10 15:43:04

+0

结果是-1和-1。预期结果是开始和结束标记之间的词。 例如: 如果我有这个字符串: ... 柏林 STARTTAG是 和 ENDTAG是 我希望得到 “柏林” 的结果。 它工作,如果我使用字符串没有特殊的字符而不是 – Y0UR 2013-03-10 15:44:20

这按预期工作:

#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; 
} 

如果你创建这样一个小的完整的例子,但是如果发生故障,那么确定问题的原因就容易多了。