2013-03-10 3 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); '. –

+0

Что касается вашего вопроса, это поможет нам помочь нам, если вы скажете, каковы фактические результаты и что вы ожидали от них. Просьба представить полный пример с фактическими и ожидаемыми результатами. –

+0

Результаты: -1 и -1. Ожидаемым результатом будет слово между начальным и конечным тегами. Например: Если у меня есть эта строка: ... Берлин STARTTAG быть и ENDTAG быть Я бы ожидать, чтобы получить «Берлин» в результате. Это работает, если я использую строки без специальных символов вместо – Y0UR

ответ

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

Если создать небольшой полный пример, как это , но там, где вы получаете отказ, тогда было бы намного легче определить, в чем проблема.

Смежные вопросы