Подсчитать число строк в тексте - Turbo Pascal
Формулировка задачи:
Одно из возможных представлений "длинного" текста - это разделить его участки (строки) равной длины и создать массив ссылок на эти строки. Используя данное представление текста написать программу, печающую текст и подсчитывающую число строк в тексте.
Решение задачи: «Подсчитать число строк в тексте»
textual
Листинг программы
const
delimiter = [#32, ',', '.', '!', ':'];
type
wrd_info = record
start, len: byte;
end;
function get_words(s: string;
var words: array of wrd_info): integer;
var
count: integer;
i, curr_len: byte;
begin
count := -1; i := 1;
while i <= length(s) do begin
while (s[i] in delimiter) and (i <= length(s)) do inc(i);
curr_len := 0;
while not (s[i] in delimiter) and (i <= length(s)) do begin
inc(i); inc(curr_len);
end;
if curr_len > 0 then begin
inc(count);
with words[count] do begin
start := i - curr_len;
len := curr_len
end;
end;
end;
get_words := count + 1;
end;
const
max_word = 255;
var
words: array[1 .. max_word] of wrd_info;
i, n: integer;
const
s: string = 'thats,,, all :: folks !!! bye...';
begin
n := get_words(s, words);
writeln('words:');
for i := 1 to n do
writeln(copy(s, words[i].start, words[i].len));
end.
Объяснение кода листинга программы
- В начале кода объявляются необходимые переменные и константы.
- В функции
get_wordsпеременнойwordsприсваивается типarray of wrd_info. Это означает, чтоwordsбудет массивом структурwrd_info. - Переменная
countинициализируется значением-1. Переменнаяiинициализируется значением1. - Затем начинается цикл
while, который выполняется до тех пор, покаiне станет равным длине строкиs. Внутри цикла происходит проверка: если текущий символs[i]является одним из символов-разделителей (delimiter), то значениеiувеличивается на единицу. - После этого начинается вложенный цикл
while, который выполняется до тех пор, пока символs[i]не станет равным одному из символов-разделителей или не станет равным концу строки (s[i] <= length(s)). Внутри цикла происходит проверка: если символs[i]не является символом-разделителем, то значенияiиcurr_lenувеличиваются на единицу. - Если после окончания вложенного цикла
whileзначениеcurr_lenбольше нуля, то увеличивается значениеcountи для элемента массиваwords[count]устанавливаются значенияstartиlen. - После завершения внешнего цикла
whileфункцияget_wordsвозвращает значениеcount + 1. - В основной части кода объявляется строка
sи вызывается функцияget_wordsс этой строкой и массивомwords. Затем выводится количество слов в строкеs. - Для вывода каждого слова выводится часть строки от
startдоlenвключительно.