воскресенье, 31 октября 2010 г.

Работа со строками

На олимпиадах редко используют обычной длины строки. Длина строки в большинстве случаев больше стандартной 255. Как тогда считать такие строки? Нужно объявить массив символов до заданной длины. Для считывания нужно учесть, что именно будет концом строки. Обычно это символ конца строки клавиша Enter или символ конца файла (Ctlr+Z, Enter). Тогда нужно использовать функции для проверки этого состояния EOLN  и EOF.

var a:array[1..1000] of char;
    i:integer;
begin
i:=0;
while not eof do {пока нет конца файла}
begin
while not eoln do  {пока нет конца строки}
begin

 read (c);
 if c>#31 then begin {если это видимый символ, запоминаем его}
   inc(i);a[i]:=c;
 end; 
end;
readln;
end;
end.

Так как видимые символы начинаются с кода 32 (это пробел) и дальше, то можно поставить такое условие (c>#31).Enter интерпретируется двумя кодами: сначала 10, а только потом 13. Можно проверить и так (c<>#10). И дальше можно работать как с обычными строками. Длина строки будет хранится в переменной i. При вводе символов до конца файла, но используя стандартный ввод с клавиатуры, нужно ввести комбинацию клавиш Ctlr+Z, Enter.

Если ввод производится из файла, то достаточно ввести операторы для работы с файлами в начале цикла

assign(input,'input.txt');reset(input);
assign(output,'output.txt');rewrite(output);

и в конце работы

close(input);
close(output);
и программа будет работать с файлами.

При этом имена input и output объявлять как файловые переменные дополнительно не надо. При выводе последняя строка в файл может не записаться, поэтому обязательно нужно ввести close(output).

Есть  другой вариант работы с файлами. После компиляции первого варианта создается exe-файл. В командной строке заишем

C:\primer.exe <input.txt >output.txt

Здесь знак < отвечает за направление данных с файла, а знак > - вывод в файл.

Комментариев нет:

Отправить комментарий