Pascal. Считывание строк.

Часто в программировании требуется грамотно считать входную строку. Обычно это делают двумя способами: считывают целиком, запоминая в переменную, или читают посимвольно, что более удобно, во всяком случае, для меня.

Итак, в этой статье мы разберем эти методы.

Начнем с первого, итак, наша задача — считать строку, запомнив в переменную, довольно проста, но дальше необходимо ее разделить на составляющие, которые нам, допустим, нужны дальше. Сейчас я покажу, как можно считывать строку вида <Фамилия><год рождения><пол>.

Все ее составляющие будут даны через пробел. Допустим, нам нужно считать несколько строк, их количество будет определять число, вводимое пользователем в самом начале. Нам нужно оставить только фамилии, запомнить их в строковый массив. Его обработкой, например, сортировкой и выводом мы заниматься пока не будем, об этом поговорим в следующих статьях. Итак, вот часть наша программка.

const K = 100;
var st:string;
i, N:integer;
mas: array[1 .. K] of string;
Begin
  readln(N);
  for i:=1 to N do mas[i] := ' ';
  for i:=1 to N do begin
    readln(st);
    mas[i] := copy (st, 1, pos(' ', st) - 1);
  end;
  for i:=1 to N do writeln(mas[i]);
End.

Правую границу массива задаем константой К. нам нужна также переменная st для того, чтобы в нее считывать входные данные (<Фамилия><год рождения><пол>).

Кроме того, объявим массив и 2 переменные i и N.

Рассмотрим основную часть программы.

Сначала мы считываем число входных строк (readln(N);). Далее мы инициализируем наш массив, заносим туда значение пробела, чтобы там не хранился так называемый «мусор», ну так просто принято. Далее в цикле идет обработка каждой строки по следующему алгоритму: считывается очередная строка, далее в ячейку массива с номером ‘i’ записывается значение фамилии, то есть результат работы вот этой конструкции «copy (st, 1, pos(‘ ‘, st) — 1);«. Здесь работают 2 стандартные функции паскаля, работающие со строкой st.

Для начала обсудим алгоритм, по которому мы будем преобразовывать нашу строку. Мы просто копируем ту ее часть, которая есть до первого пробела. То есть, pos(‘ ‘, st) возвращает числовое значение, равное позиции пробела в исходной строке. Из этого числа мы вычитаем 1, так получаем правую границу нашей строки, то есть, функция Copy копирует часть строки st, с первого символа до символа с номером, который получается из «pos(‘ ‘, st) — 1«. В последнем цикле мы выводим весь наш массив с фамилиями, чтобы программа давала какой-то результат.

Вот, примерно так можно объяснить этот алгоритм, он, в принципе, прост, удобен для тех, кто хорошо знает стандартные функции Паскаля, но он не везде удобен, поэтому и существует второй — символьный способ.

Этот способ заключается в том, что мы читаем строку в цикле, как массив символов и, возможно, сразу же делаем необходимую проверку или другие действия.

Напишем программку, которая из строки , заканчивающейся восклицательным знаком, выведет все цифры. Вот ее код.

var
  c: char;
  st: string;
begin
  st := ''; c := ' ';
  while c <> '!' do 
  begin
    read(c);
    if c in ['0'.. '9'] then st := st + c + ' ';
  end;
  writeln(st);
end.

Здесь мы объявляем всего лишь 2 переменные с:char для того, чтобы в нее считывать каждый символ. В st:string мы будем записывать нашу получившуюся строку.

осле инициализации переменных мы запускаем цикл, который будет выполняться до тех пор, пока очередным символом с строке не станет «!». При каждом его проходе считывается очередной символ, далее следует проверка, является ли символ цифрой, здесь удобно использовать множества, главное здесь, записать границы в кавычках, потому что мы проверяем переменную с, а она символьного типа.

Итак, на этих примерах мы с Вами только начинаем работу со строками, так что все еще впреди=)
Рейтинг
( Пока оценок нет )
Загрузка ...