Паскаль: обробка текстів, Детальна інформація

Паскаль: обробка текстів
Тип документу: Реферат
Сторінок: 17
Предмет: Комп`ютерні науки
Автор: Олексій
Розмір: 33.1
Скачувань: 1094
6. Посимвольне читання тексту

Приклад 6. У тексті з рядками необмеженої довжини записано слова в латинському алфавіті, довжина яких не перевищує 255. Слова відокремлюються пропусками в довільній кількості та з рядка на рядок не переносяться. Треба визначити кількість повторень першого слова в подальшому тексті.

Для розв’ язання задачі треба

прочитати перше слово (якщо воно взагалі є в тексті), а далі по одному читати слова й порівнювати їх із першим, за рівності збільшуючи значення лічильника.

Слово є лексичною одиницею, або лексемою тексту, тобто такою послідовністю, що має самостійне значення, тому функцію читання слова з тексту назвемо getlex (взяти лексему). Ось її заголовок:

function getlex(var f:text; var lex:string):boolean.

З її виклику повертається ознака наявності слова в частині тексту, прочитаній за її виклику. Слово зберігається як значення параметра-змінної lex (лексема), а коли його в решті тексту немає, значенням стає порожній рядок. Отже, нехай s1, s2 – рядки, nrep – лічильник повторень у такому алгоритмі:

nrep:=0;

if getlex(f, s1) then

begin

while getlex(f, s2) do

if s1=s2 then nrep:=nrep+1;

writeln(nrep)

end

else writeln('у тексті немає слів');

Щоб прочитати слово, треба

від поточного доступного символу прочитати пропуски та кінці рядків, що передують слову, та запам’ ятати його символи в рядковій змінній.

Для визначення, чи є символ латинською літерою, скористаємося функцією isletter:

function isletter(c : char) : boolean;

begin

isletter := ('a'
end;

Запишемо функцію getlex. Коли під час її виклику завершується виконання першого циклу, можуть бути істинними обидві умови, eof(f) та isletter(ch). Це можливо, якщо останній символ тексту є водночас першою літерою слова. У цьому разі символ дописується до порожнього слова.

function getlex(var f : text; var lex : string) : boolean;

var ch : char; isl : boolean;

begin

ch:=' '; lex:=''; getlex:=false;

while not eof(f) and not isletter(ch) do

read(f, ch);

{eof(f) or isletter(ch)}

The online video editor trusted by teams to make professional video in minutes