Felipe
Quando se trabalha com textos, é muito comum precisar-se substituir um trecho de uma string por outra, no entanto a biblioteca do padrão ANSI C não nos dá este recurso, você nunca se perguntou porque? Pois bem, vou tentar lhe explicar em poucas palavras, caso você ainda não tenha descoberto. Em primeiro lugar, quando se utiliza strings alocadas estaticamente, o espaço reservado para armazenar essas strings é limitado, por isso não se pode, por exemplo, escrever além desse espaço, que é reservado durante a compilação, se você quebrar essa regra, você poderá estar escrevendo em um espaço reservado para outras variáveis do seu programa. Agora, quando se utiliza strings alocadas dinamicamente, tem se que tomar o cuidado de não exceder o espaço que foi alocado sem realocar mais espaço, pois nem sempre a área que você está tentando escrever pertence ao seu programa. Tendo isso em mente eu implementei as rotinas Replace e OptimizedReplace, que realizam esta tarefa sempre tendo o cuidado de não invadir áreas de memória que não lhes pertencem. Observe que Replace sempre aloca uma nova cópia da string quando faz uma substituição, isso a torna um pouco lenta, principalmente para string grandes e que tem muitas repetições, já OptimizedReplace se preocupa em só realizar uma nova alocação quando o trecho que está sendo substituido for menor que a string pela qual ele vá ser substituido, isso também faz com que, além de mais rápida, não fragmente tanto a memória, um efetio colateral do excesso de alocações. Ambas as rotinas retornam uma cópia da string de entrada com as devidas alterações realizadas, mantendo-se assim os parâmetros de entrada intactos, uma observação importante, é que o seu programa deve desalocar a string retornada por Replace e OptimizedReplace. Com algumas poucas alterações pode se obter outras rotinas interssantes à partir destas duas, por exemplo, poderia-se modificá-las para que quando a string a