Вот функция, которая заменит все экземпляры определенного слова (строки) другим словом (strng) в родительской строке.Преобразование цикла while в цикл while while
void clean(std::string &s,const std::string oldVal,const std::string newVal){
std::string::size_type pos = 0;
while((pos = s.find(oldVal,pos)) != std::string::npos){
s.replace(pos,oldVal.size(),newVal);
pos += newVal.size();
}
}
Я довольно новичок в C++, и я нашел условие, которое немного сложно понять. Поэтому я решил сделать этот код более удобочитаемым. Я попытался сделать это в цикле do while. Однако программа потерпела крах. Выброс исключений out_of_range.
Что случилось с моим кодом? Я использовал ту же строку для проверки обеих функций.
void clean2(std::string &s,const std::string oldVal,const std::string newVal){
std::string::size_type pos = 0;
do{
pos = s.find(oldVal,pos);
s.replace(pos,oldVal.size(),newVal);
pos += newVal.size();
}while(pos != std::string::npos);
}
В цикле 'do-while' вам необходимо проверить' pos' перед его использованием. –
Я проверяю его в состоянии while. –
Я имею в виду, прежде чем вы используете 'pos' в функции' replace' и добавляете к нему. –