rybar napisał(a)
W moim przypadku zawsze będzie ciąg znaków, tzn. dla wartości=0 będzie '0000000000'. Co się wtedy stanie?
Jeśli ciąg będzie się składał z samych zer to pętla się nie wykona; Pętlę należy ustawić tak, by licznik był inkrementowany (teraz jest dekrementowany):
function RemoveZeros(const ALine: AnsiString): AnsiString;
var
I: Byte;
begin
Result := '0';
for I := 1 to Length(ALine) do
if ALine[I] <> '0' then
begin
Result := Copy(ALine, I, Length(Aline) - Pred(I));
Exit;
end;
end;
rybar napisał(a)
Nie powinno być: 'I := Length(ALine) downto 2 do'??
Nie, bo zostanie pominięty pierwszy znak w łańcuchu; Poprzednia podana przeze mnie funkcja była zła - szukała od tyłu i po napotkaniu pierwszego zera kopiowała część i kończyła; Bezpieczniej jest szukać od pierwszego znaku, bo żadna cyfra nie zostanie stracona w przypadku, gdy ciągiem będzie np.: 0000340054
; Powyższy algorytm zwróci 340054
, a ten w moim wcześniejszym poście zwróci 54
, co jest błędem - za zamieszanie przepraszam - nie wiem gdzie ja miałem głowę...
rybar napisał(a)
Panowie, od wczoraj kombinuję a kod usuwa mi tylko piersze zero
Widać słabo kombinujesz, skoro tyle czasu nie znalazłeś rozwiązania...