Member 13228278 Ответов: 1

Как получить конкретный экземпляр строки, который повторяется несколько раз в строке


Я хочу преобразовать данные в строке KeyData (которая присутствует в атрибуте <eg2keydata>) В *.но он всегда берет первый экземпляр keyData в строке msg. Как я могу получить конкретный экземпляр каждый раз, когда я хочу преобразовать его? (или) есть ли способ, когда команда find дает все экземпляры, а не только первое появление строки.

Что я уже пробовал:

 const std::string& msg = "177\"><eg1KeyData Protocol=\"abc\" KeyLength=\"6\" KeyData=\"d15444\"></eg1KeyData><eg2KeyData Protocol=\"hm\" KeyLength=\"6\" KeyData=\"432579\"></eg2KeyData><Tunne ";
         std::size_t search1 =msg.find("<eg2KeyData"); 
         const std::string from1 = "KeyData=\"";        
         const std::string to1= "\"></eg2KeyData>";
         std::size_t endpos1 = msg.find(to1);
         std::string s=msg;
         std::size_t l1=0;      
         if (msg.find("<eg2KeyData")!=std::string::npos)
{  
         for(search1; search1<endpos1;search1++)
{
         l1=msg.find("KeyData=\"");            
}
        if(l1!=0)
{        
        std::size_t r1= endpos1-l1-from1.length();
        s.replace(l1+from1.length(),r1,r1,'*');        
 }
}
     std::cout<<s;

1 Ответов

Рейтинг:
1

Richard MacCutchan

if (msg.find("<eg2Data")!=std::string::npos)

Этот текст не существует в вашей исходной строке.


Member 13228278

Спасибо за ответ. Я исправил исходную строку.

Richard MacCutchan

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

Member 13228278

Я уверен, что цикл for ошибочен, но я не могу его исправить.

Richard MacCutchan

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