Другие языки программирования и технологии
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;
Если пробелов между числами гарантировано по одному, проверку на пустую подстроку можно не делать.
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;
Если пробелов между числами гарантировано по одному, проверку на пустую подстроку можно не делать.
Евгений Меденцев
Спасибо, помогло!!!
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.
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.
я бы сканил каждый символ и запоминал позицию пробела. Если встречается 0 - ищем окончание цифры - следующий пробел и функцией delete удаляем кусок из строки.
перебираеш символы и записываеш в новую строку циклом до пробела
если встречается ноль ставиш некую перемнную (флаг) равной 1
когда найден пробела проверяеш второй флаг если он равен 0 устанавливаеш в ед
записываеш 2ую в третью строку при условии что флаг1= 0 а не 1
при этом цикл начинается если следующий символ не еще один пробел т. е. флаг 2=0 если 1 выход из цикла
сбрасываеш флаги, и вторую строку и идеш дальше
третья строка будет в итоге содержать 1ую без чисел с нулем
как то так
если встречается ноль ставиш некую перемнную (флаг) равной 1
когда найден пробела проверяеш второй флаг если он равен 0 устанавливаеш в ед
записываеш 2ую в третью строку при условии что флаг1= 0 а не 1
при этом цикл начинается если следующий символ не еще один пробел т. е. флаг 2=0 если 1 выход из цикла
сбрасываеш флаги, и вторую строку и идеш дальше
третья строка будет в итоге содержать 1ую без чисел с нулем
как то так
Похожие вопросы
- Pascal. Дан натуральный отрезок чисел [A,B]. Найти те числа этого отрезка, которые являются степенью двойки.
- Pascal . Дан массив вещественных чисел. Найти сумму элементов, номера которых являются простыми числами
- Pascal. Дана строка, найти длину первого и последнего слова первого я нашел, а как второго не понимаю помогите
- Даны 3 целых числа. Возвести в квадрат отрицательные числа и в третью степень - положительные (число 0 не изменять)
- Pascal: Дано 3-значное число N.Определить,являются ли числа,из которых оно состоит членами геометрической прогрессии
- Дан файл целых чисел. Создать два новых файла, первый из которых содержит положительные числа из исходного файла...
- помогите составить программу на Pascal дана матрица NxN.Найти наибольший элемент строки K.
- Помогите испрвить код Переписать первые элементы каждой строки матрицы a(n*m), больше некоторого числа C, в массив b .
- Дана строка символов. Признак конца строки "\n" (перевод строки). Строка состоит из слов, разделенных пробелами. Вывести
- дана целочисленная матрица размера mxm. определить числа b1,b2,...bm,каждое из которых равно количеству четных элементов