Как получить конкретный экземпляр строки, который повторяется несколько раз в строке
Я хочу преобразовать данные в строке 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;