Algoritmo StringReplace

24/02/2016

1

Boa noite galera,

estou estudando algoritmo e queria montar uma função parecida com a StringReplace do delphi, claro não quero reinventar a roda, somente quero aumentar meu conhecimento em lógica, então este serve apenas para estudo.

Sendo assim, gostaria de montar uma função: function Substituir(const psTexto, psValorAntigo, psValorNovo): string; onde passando o texto como parâmetro ele substitua todos os valores antigos para o novo.

Agraço à todos.
Responder

Posts

25/02/2016

Raylan Zibel

Se quer código pode olhar direto no delphi.
Control + Click.
Responder

25/02/2016

Hugo Silva

Boa noite Raylan.

Obrigado por responder o post.

Sim eu poderia olhar no StringReplace o código que ele usa, porém se entrarmos a fundo, ele usa diversos métodos que eu não gostaria de utilizar como Pos, Copy entre outros métodos de manipulação de string, eu gostaria de saber o algoritmo mesmo para essa situação.

Exemplo:
Remover números de uma frase.

function RemoverNumeros(const psTexto: string): string;
const
sCST_NUMEROS = ('0123456789');
var
iIdxTexto: Integer;
iIdxNumeros: Integer;
sChar: Char;
bContem: Boolean;
begin
Result := EmptyStr;
bContem := False;
for iIdxTexto := 1 to Length(psTexto) do
begin
sChar := psTexto[iIdxTexto];
for iIdxNumeros := 1 to Length(sCST_NUMEROS) do
begin
bContem := (sChar = sCST_NUMEROS[iIdxNumeros]);
if bContem then
Break;
end;

if not bContem then
Result := Result + sChar;
end;
end;

O que eu gostaria é saber da lógica como seria para implementar.
Responder

25/02/2016

Marco Antônio

Se quer código pode olhar direto no delphi.
Control + Click.


Rs
Responder

25/02/2016

Wazowski

function TForm3.Substituir(prAntigo, prNovo, prPalavra: String): String;
var
I, J, N, wTam: Integer;
wAux, wNova: String;
wAchou: Boolean;
wRestante: String;
begin
wTam:= Length(prAntigo);
I:= 1;
wNova:= prPalavra;
wAchou:= false;
while (not wAchou) and (I < Length(prPalavra) + 1) do
begin
wAchou:= false;
wAux:= '';
for J:= 0 to wTam - 1 do
wAux:= wAux + prPalavra[I + J];
if wAux = prAntigo then
begin
wAchou:= true;
wNova:= '';
wRestante:= '';
for N:= 1 to I - 1 do
wNova:= wNova + prPalavra[N];
wNova:= wNova + prNovo;
for N:= I+J to Length(prPalavra) do
wRestante:= wRestante + prPalavra[N];
end;
Inc(I);
end;
if wRestante <> '' then
wRestante:= Substituir(prAntigo, prNovo, wRestante);
Result:= wNova + wRestante;
end;
Responder

25/02/2016

Hugo Silva

Sir Wazowski, muito boa sua função, era o que estava procurando, estudei ela e consegui entender tranquilo.

Muito obrigado.
Responder

25/02/2016

Hugo Silva

Moderadores, o post já supriu minhas necessidades, podem apagá-lo.

Obrigado.
Responder