Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ В строке из группы цифр удалить нули.

Автор: Giv 27.11.2003 8:54

Дана символьна строка, где слова разделены пробелами. Удалить из каждой группы цифр, которой не предшествует точка все начальные нули.


Вот что у меня получилось. Но эта прога удаляет и те 0, которые стоят и между цифр, а мне нужно,чтобы они оставались. Что посоветуете? Результат должен быть таким: 0.25 = 0.25; 055=55; 0055=55; 505 = 505; 500=500. У меня всё работает кроме 505=505, у меня 505=55. Кто силён, подскажите!

Код
Program Stroka;
uses crt;
type charset=set of char;
const Digits:charset=['1','2','3','4','5','6','7','8','9'];
nul:charset=['0'];
var str: string[100];
i:integer;
begin
clrscr;
writeln('Введите строку');
read(str);
for i:=1 to length(str) do
while ((str[i] in Nul) and (str[i+1] in digits)) or ((str[i] in Nul) and (str[i+1] in Nul))  do
begin
delete(STR,i,1);
end;
writeln(str);
readkey;
end.



тут есть несколько оишбок, т.е. не ошибок, а лишних действий, но это не суть важно, они возникли в ходе написания проги и экспериментов, поэтому они мне были нужны, ну а сейчас я пока их так и оставил - это операторные скобки после while ... do и nul:charset=['0']; вместо того чтобы просто написать '0'

Автор: GLuk 27.11.2003 23:19

Попробуй вот это:

Код

{$B+}
Program Zero_Cut;
Uses
   Crt;
Type
   Digits = Set Of 0..9;
Const
    S:String = '0.205 0578200800 500 505 690 003 000.093';
Const
    Digs:Digits = [0,1,2,3,4,5,6,7,8,9];
Var
  LastPos:Byte;
  i:Byte;
Begin
    ClrScr;
    While Pos('0',S)<>0 do
    begin
         i:=Pos('0',S);
         If (S[i+1]<>'.') and ((S[i-1]>'9') or (S[i-1]<'0')) and (S[i-1]<>'.') then
         begin
              Delete(S,i,1)
         end
         else
             begin
                  If S[i+1]='.' then S[i]:=#255;
                  If (S[i-1]>='0') and (S[i-1]<='9') or (S[i-1]='.') then
                  begin
                       While S[i]<>' ' do
                       begin
                            If S[i]='0' then S[i]:=#255;
                            Inc(i);
                       end;
                  end;
             end;

    end;
    While Pos(#255,S)<>0 do S[Pos(#255,S)]:='0';
    WriteLn(S);
End.