Другие языки программирования и технологии

Pascal. Дана строка, элементы - числа через пробел. Как отсечь числа, которые содержат '0'?

Строка такая. Регулярок нет ((( 121 144 202 244 400 1210 10201 1100100
Ну так выделяйте подстроки-числа и убивайте те, что с нулями.

S := S + ' '; {чтобы не потерять последнее число}
while Pos(' ', S) > 0 do begin
SubS := Copy(S, 1, Pos(' ', S) - 1); {выделяем то, что до пробела}
Delete(S, 1, Pos(' ', S)); {и удаляем из строки}
if (SubS <> '') and (Pos('0', SubS) = 0) then делаете_с_подстрокой_что_угодно
end;

Если пробелов между числами гарантировано по одному, проверку на пустую подстроку можно не делать.
Виталий .
Виталий .
59 613
Лучший ответ
Евгений Меденцев Спасибо, помогло!!!
procedure Out(T : String);
if Length(T) > 0 then
if Pos('0', T) > 0 then WriteLn('Число ', T, ' с нулём') else WriteLn('Число ', T, ' без нуля');
end;

var S, T : String; N : Byte;
begin
Write('Введите строку чисел: '); ReadLn(S);
T := '';
for N := 1 to Length(S) do
if S[N] in ['0'..'9'] then T := T + S[N]
else Out(T);
Out(T); { это чтобы последнее число не потерялось }
end.
Никита Смирнов
Никита Смирнов
69 315
я бы сканил каждый символ и запоминал позицию пробела. Если встречается 0 - ищем окончание цифры - следующий пробел и функцией delete удаляем кусок из строки.
Азат Жумаев
Азат Жумаев
37 344
перебираеш символы и записываеш в новую строку циклом до пробела
если встречается ноль ставиш некую перемнную (флаг) равной 1
когда найден пробела проверяеш второй флаг если он равен 0 устанавливаеш в ед
записываеш 2ую в третью строку при условии что флаг1= 0 а не 1
при этом цикл начинается если следующий символ не еще один пробел т. е. флаг 2=0 если 1 выход из цикла
сбрасываеш флаги, и вторую строку и идеш дальше
третья строка будет в итоге содержать 1ую без чисел с нулем

как то так
Эдуард Ахидов
Эдуард Ахидов
1 411

Похожие вопросы