Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_Инф_Паскаль_3_2007.doc
Скачиваний:
5
Добавлен:
14.08.2019
Размер:
338.94 Кб
Скачать

6.2.1. Основные задачи обработки текста

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

1. Строка текста или одно слово – одномерный массив символов, а несколько слов – это массив строк (двумерный массив символов).

2. Длина слов в тексте неодинакова. Обычно для разделения слов используются пробелы. Найти пробел в предложении можно, просматривая последовательно каждый его символ. Если очередной пробел найден, то предыдущее слово закончилось.

Формирование отдельных слов может быть осуществлено посимвольно, путем объединения слова (строки) с очередным символом, отличным от пробела (вначале формируемое слово должно быть пустым).

Возможны 2 способа представления текстов:

1) слова разделены всегда одним пробелом;

2) слова разделены одним или несколькими пробелами.

В наиболее часто встречающихся задачах обработки слов выделенные слова (массивы слов) обрабатываются в соответствии с условиями задачи, например, определяются длина слов или осуществляется анализ букв слов.

6.2.2. Выделение слов из текста (слова разделены одним пробелом)

Ввести предложение, в котором слова разделены одним пробелом. Выделить слова, переписать их в массив слов и вывести на экран.

Текст программы, реализующей эту задачу, приведен ниже.

Program GetSl1;

CONST

m = 50; {Максимальное количество слов в предложении}

VAR

Predl : string; {Предложение}

Slovo : array[1..m] of string; {Массив для слов}

n, k, i: integer; {Вспомогательные переменные}

BEGIN

WriteLn('Введите предложение:');

ReadLn(Predl);

n := Length(Predl);

k := 1;

Slovo[k] := ''; {Пустое слово – 2 апострофа подряд}

For i := 1 to n do

If predl[i] <> ' ' then

Slovo[k] := Slovo[k] + Predl[i]

Else

begin

k := k + 1;

Slovo[k] := '';

end;

WriteLn('Слова из предложения: ');

For i := 1 to k do

WriteLn(Slovo[i]);

Readln;

END.

6.2.3. Выделение слов из текста (слова разделены несколькими пробелами)

Ввести предложение, в котором слова могут быть разделены несколькими пробелами. Выделить слова и вывести их на экран.

В этом случае номер слова меняется при встрече с первым пробелом, а все последующие пробелы пропускаются.

Текст программы, реализующей эту задачу, приведен ниже.

Program GetSl2;

Const m = 50;

Var Predl : string;

Slovo : array [1..m] of string;

n,k,i : integer;

Begin

WriteLn('Введите предложение:');

ReadLn(Predl);

n := Length(Predl);

k := 1;

Slovo[k] := '';

i := 1;

While i<=n do

If predl[i] <> ' ' then {символ – не пробел}

begin

Slovo[k] := slovo[k] + predl[i];

i := i + 1;

end

Еlse {символ – пробел}

begin

k := k + 1;

slovo[k] := '';

While (predl[i]=' ') and (i <= n) do i := i + 1;

end;

WriteLn('Слова из предложения:');

For i := 1 to k do WriteLn(slovo[i]);

END.

6.2.4. Выделение символов в строке и расположение их по алфавиту

Ввести в ЭВМ строку из n символов латинского алфавита (n<30). Расположить их по алфавиту.

Буквы латинского алфавита 'A' – 'Z', 'a' –'z' имеют коды, значения которых возрастают. Для решения задачи можно применять алгоритм сортировки "пузырьком".

Текст программы, реализующей эту задачу, приведен ниже.

Program Sorts;

Var s : string;

sr : char;

n, i, k : integer;

Begin

writeln('Введите строку');

readln(s);

n := length(s);

for k := 1 to n-1 do

for i := 1 to n-k do

if s[i]>s[i+1] then

begin

sr :=s[i];

s[i] := s[i+1];

s[i+1] := sr;

end;

writeln('Строка с упорядоченными символами:');

writeln(s);

readln;

End.