2013-03-10 137 views
0

我從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

回答

3

這按預期工作:

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

如果你創建這樣一個小的完整的例子,但是如果發生故障,那麼確定問題的原因就容易多了。