omo implementar uma substituição eficiente de cadeias de palavras inteiras em C ++ sem expressões regulare

Talvez eu esteja ignorando algo óbvio, mas estava pensando qual seria a maneira mais rápida de implementar a substituição de cadeias de palavras inteiras em C ++. No começo, considerei simplesmente concatenar espaços para a palavra de pesquisa, mas isso não considera os limites ou a pontuação das string

Esta é minha abstração atual para substituição (sem palavras inteiras):

void Replace(wstring& input, wstring find, wstring replace_with) {
  if (find.empty() || find == replace_with || input.length() < find.length()) {
      return;
  }
  for (size_t pos = input.find(find); 
              pos != wstring::npos; 
              pos = input.find(find, pos)) {

      input.replace(pos, find.length(), replace_with);
      pos += replace_with.length();
  }
}

Se eu considerar apenas os espaços como um limite de palavras, provavelmente poderia implementá-lo comparando o início e o final da sequência de pesquisa com a sequência de caracteres para cobrir os limites da sequência e, em seguida, seguindo com um Substitua (L '' + encontre + L '') .... mas eu queria saber se havia uma solução mais elegante que incluiria pontuação com eficiênci

Vamos considerar que uma palavra é qualquer coleção de caracteres separados por espaços em branco ou pontuação (para simplificar, digamos! "# $% & '() * +, -. / No mínimo - que correspondem a(c > 31 && c < 48)).

Na minha aplicação, eu tenho que chamar essa função em uma série bastante grande de strings curtas, que podem incluir vários Unicode que eu não quero dividir novas palavras. Também gostaria de evitar a inclusão de bibliotecas externas, mas o STL está be

O objetivo de não usar expressões regulares é a promessa de menos sobrecarga e o objetivo de uma função rápida adequada a essa tarefa específica em um grande conjunto de dado

questionAnswers(2)

yourAnswerToTheQuestion