#c #string
#c #строка
Вопрос:
У меня есть функция, которая заменяет вложенную строку другой:
std::string replaceAll(std::string data, std::map <std::string, std::string> dict){
for(std::pair <std::string, std::string> entry : dict){
size_t start_pos = data.find(entry.first);
while(start_pos != std::string::npos){
data.replace(start_pos, entry.second.length(),entry.second);
start_pos = data.find(entry.first, start_pos entry.second.size());
}
}
return data;
}
Если исходная строка была ls llllllllllllll
, и я хотел заменить ls на ls --color=auto
, это сделало бы это
ls --color-autolllll
. Как я могу избежать этого переполнения?
Ответ №1:
Вторым аргументом replace
должно быть количество символов из исходной строки, которую вы хотите заменить. Итак, вам нужно:
data.replace(start_pos, entry.first.length(), entry.second);
// ^^^^^^^^^^^^^^^^^^^^ length of original string