Zamień znak w łańcuchu na jakiś ciąg w miejscu


Chcę zastąpić znak w ciągu ciągiem. czy mogę to zrobić na miejscu? Ponieważ nowy ciąg ma długość większą niż oryginalny ciąg. Pytanie brzmi, czy mogę to zrobić przy użyciu dodatkowego bufora? na przykład

void replaceChar(std::string &input, std::string replacementString, char charToReplace)
{
//some code here. No additional buffer
}

void main(){

  std::string input = "I am posting a comment on LinkedIn";
  std::string replacementString = "pppp";
  char charToReplace = 'o';
  replaceChar(input, replacementString, charToReplace);
}

Chcę tylko strategii (algorytmu). dobrze by było, gdyby algorytm był zaprojektowany z myślą o pewnym języku, który nie będzie dynamicznie zwiększał ani zmniejszał długości łańcucha po zainicjowaniu, jak c ++