Skocz do zawartości

[Pascal]Kłopot z operacjami na string


Marmot

Rekomendowane odpowiedzi

Witam :) .

 

Rzadko się o coś pytam na forum, ale twierdzę, że pewnie ktoś zna tu odpowiedź. Otóż, piszę sobie w Pascalu program, który ma za zadanie zamienianie pewnych znaków na inne. Mam coś takiego:

var
i:integer;
tekst:string;
begin
tekst:=Edit1.Text;
if pos('a',tekst) or pos('A',tekst) > 0 then
  begin
   i:=pos('a',tekst);
    if i=0 then i:=pos('A',tekst);
   delete(tekst,i,i);
   insert('1',tekst,i);
  end;
Edit2.Text:=tekst;
end;

Działa to tylko wtedy, kiedy w tekście mam tylko jedno "a". Np. agugu zamieni mi na 1gugu, ale gdy już mam więcej "a", to program szwankuje i np. jak wpiszę ada to mi zamienia na 1da.

Próbowałem też dać pętlę, która wygląda tak:

var
i:integer;
tekst:string;
begin
tekst:=Edit1.Text;
repeat
if pos('a',tekst) or pos('A',tekst) > 0 then
  begin
   i:=pos('a',tekst);
    if i=0 then i:=pos('A',tekst);
   delete(tekst,i,i);
   insert('1',tekst,i);
  end;
until pos('a',tekst) and pos('A',tekst) = 0;
Edit2.Text:=tekst;
end;

Mimo tego, program zamienia tylko to pierwsze "a".

Czy ktoś wie w czym tkwi problem, lub w czym ja robię błąd :P ? Przydałoby mi się to dosyć, więc chciałbym prosić o jak najszybszą odpowiedź ;) .

 

PS. Jakby to miało coś pomóc, to korzystam z Lazarus 0.9.18 z kompilatorem Free Pascal 2.0.4 dla Linux i386.

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem coś takiego:

repeat
if (pos('a',tekst) > 0) or (pos('A',tekst) > 0) then
  begin
   i:=pos('a',tekst);
    if i=0 then i:=pos('A',tekst);
   delete(tekst,i,i);
   insert('1',tekst,i);
  end;
until (pos('a',tekst) = 0) and (pos('A',tekst) = 0);

Dałem taki kod i już działa bez zarzutu :P .

 

EDIT: Ale mam teraz nowy błąd. Mam taki kod:

repeat
if (pos('a',tekst) > 0) or (pos('A',tekst) > 0) then
  begin
   i:=pos('a',tekst);
    if i=0 then i:=pos('A',tekst);
   delete(tekst,i,i);
   insert('1',tekst,i);
  end;
until (pos('a',tekst) = 0) and (pos('A',tekst) = 0);
repeat
if (pos('b',tekst) > 0) or (pos('B',tekst) > 0) then
  begin
   i:=pos('b',tekst);
    if i=0 then i:=pos('B',tekst);
   delete(tekst,i,i);
   insert('2',tekst,i);
  end;
until (pos('b',tekst) = 0) and (pos('B',tekst) = 0);

i gdy wpiszę np. baba, to mi zwraca 211, a gdy np. alibaba, to zwraca 1li2. Może mi ktoś wyjasnić, czym to jest spowodowane O_O ? Bo ja już naprawdę nie rozumiem.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...