Проблемы при попытке заменить вложенную строку неравной длины

#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