IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> В строке из группы цифр удалить нули.
Giv
сообщение 27.11.2003 4:54
Сообщение #1





Группа: Пользователи
Сообщений: 5

Репутация: -  0  +


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


Вот что у меня получилось. Но эта прога удаляет и те 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'

Сообщение отредактировано: volvo - 17.12.2004 16:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 1)
GLuk
сообщение 27.11.2003 19:19
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


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

Код

{$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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 13:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"