Лекция

Тема: «Обработка строковых переменных в программах на Turbo Pascal»

 

План

1. Понятие строки и описание строковых переменных

2. Основные действия над строками

3. Функции по обработке строк

4. Примеры

 

1. Понятие строки и описание строковых переменных

Нередко в программах помимо цифр используют символьные величины. Такие величины могут включать любые символы, заключенные в кавычки.

Такие величины (переменные) описываются с помощью типа CHAR.

Var A,B:Char;

Для присваивания данной переменной символа, сам символ заключается в одинарные кавычки.

A:=’Y’;

Однако данная переменная может содержать всего один символ в то время, когда в реальных   программах действия выполняются над целыми выражениями.

Для реализации   обработки   наборов  символов  можно  воспользоваться массивом символов:

Var A: Array [1..256] Of Char;

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

Если описать переменные вида:

Var A,B: String;

то это, по сути, описаны два массива длиной в 255 символов.

Для ввода таких переменных нужно просто ввести команду

Read (A); или Readln(A);

В этом случае можно ввести произвольный текст длиной до 255  символов.  При этом, если   текст   короче 255 символов, то остальные элементы обрезаются.

Для вывода такой переменной модно использовать оператор

Write(A); или Writeln (A);

Любая переменная,  описанная  как String,  занимает в памяти ЭВМ 255 символов, хотя на практике такая длина часто не  используется.  Для экономии места существует модифицированный вид описания строковых переменных:

имя переменной:STRING [количество символов];

Например:

Var A: String [20];

B: String [10];

Описаны два массива в 20 и 10 символов.

 

2. Основные действия над строками

К строковым переменным применима операция присваивания. В этом случае присваиваемое выражение должно быть либо также строковой переменной, либо выражением, заключенным в кавычки. Если присваиваемое выражение больше длины переменной, то оно урезается; если меньше, то переменная дополняется пробелами.

Например:

Var A: string [15];

B: string [5];

Begin

A:='Доброе утро';

B:=A;{ В = Добро}

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

Например: 

Var  A,  B,  C: String [20];

D: String [62];

Begin

A:='Мы';

B:='изучаем';

C:='переменные';

D:=A+' '+B+' строковые '+C;

Writeln (D);

End.

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

При сравнении строковая переменная может сравниваться только с выражением строкового типа. При этом та строка, которая короче, дополняется пробелами. Сравнение происходит посимвольно.

Например:

A:='Иванов';

B:='Иваницкий';

{А>B}

Эта особенность положена в основу сортировки и поиска текстовой информации в базах данных.

Раз тип STRING является аналогом массива символов, то строку можно также обрабатывать в массиве посимвольно. Для этого вначале определяют длину строки с помощью функции

LENGTH (строковая переменная)

Затем организовывают цикл вида:

Var A: String [20];

For I:=1 To Length (A) Do

оператор обработки очередного символа;

При этом в операторе обработки символа обращение к символу осуществляется по записи А [i].

 

3. Функции и процедуры по обработке строк

Помимо функции Length () в Паскале имеется еще ряд функций, которые облегчают обработку строковых переменных:

STR:='Длина строки';

STR1:=COPY(STR,7,6); {STR1=строки}

STR:='Доброе утро';

STR1:='всем ';

INSERT(STR1, STR, 8); {STR=Доброе всем утро}

STR:='Тридцать';

DELETE(STR,4,5); {STR=Три}

STR:='Доброе утро';

STR1:='всем';

STR2:='утро'

D:= POS (STR1, STR); {D=0}

D:=POS (STR2, STR); {D=8}

 

4. Примеры

Пример. Определить сколько раз в слове встречается заданная буква.

 

{Подключаем модуль по работе с экраном}

Uses Crt;

{Описываем переменные}

Var str: String;

bukva:String[1];

i,k:Integer;

Begin

{Очищаем экран}

ClrScr;

{Вводим исходный текст}

Write(‘Введите исходный текст: ’); Readln (str);

{Вводим искомую букву}

Write(‘Введите искомую букву: ’); Readln (bukva);

{Вначале количество равно 0}

k:=0;

{Организовываем цикл для посимвольной обработки}

For i:=1 To Length(str) Do

{Если текущий символ во фразе равен указанной букве}

If str[I]=bukva Then

{то количество увеличивается на 1}

k:=k+1;

{Выводим на экран найденное количество}

Writeln (‘Количество равно: ’,k);

{Делаем паузу для просмотра результата}

Readln;

End.

 

Пример. Подсчитать количество слов в выражении. Делаем предположение, что каждое слово разделено не более чем одним пробелом. Исходя из этого ограничения, можно сделать вывод, что количество слов во фразе равно количеству пробелов +1.

 

{Подключаем модуль по работе с экраном}

Uses Crt;

{Описываем переменные}

Var str: String;

i,k:Integer;

Begin

{Очищаем экран}

ClrScr;

{Вводим исходный текст}

Write(‘Введите исходный текст: ’); Readln (str);

{Вначале количество равно 0}

k:=0;

{Организовываем цикл для посимвольной обработки}

For i:=1 To Length(str) Do

{Если текущий символ во фразе равен пробелу}

If str[I]=’ ’ Then

{то количество увеличивается на 1}

k:=k+1;

{Выводим на экран найденное количество+1}

Writeln (‘Количество слов равно: ’,k+1);

{Делаем паузу для просмотра результата}

Readln;

End.

 

Пример. Усовершенствовать приведенный выше код таким образом, чтобы программа считала количество слов даже, если между словами введено более одного пробела. Признаком слова будем считать если текущий символ пробел, а за ним буква.

При этом, если в тексте есть хотя бы один символ, то считаем, что количество слов равно 1

 

{Подключаем модуль по работе с экраном}

Uses Crt;

{Описываем переменные}

Var str: String;

i,k:Integer;

Begin

{Очищаем экран}

ClrScr;

{Вводим исходный текст}

Write(‘Введите исходный текст: ’); Readln (str);

{Вначале количество равно 0}

k:=0;

{Организовываем цикл для посимвольной обработки}

For i:=1 To Length(str)-1 Do

{Если текущий символ во фразе равен пробелу, а следующий нет}

If (str[I]=’ ’)  And (str[I+1]<>’ ‘) Then

{то количество увеличивается на 1}

k:=k+1;

{Если фраза не пустая, то нужно подсчитать первое слово}

If Length(str)<>0 Then

                        k:=k+1;

{Выводим на экран найденное количество+1}

Writeln (‘Количество слов равно: ’,k+1);

{Делаем паузу для просмотра результата}

Readln;

End.

 

Пример. Написать программу, заменяющую во всех словах фразы окончание о на е

 

{Подключаем модуль по работе с экраном}

Uses Crt;

{Описываем переменные}

Var str: String;

i:Integer;

Begin

{Очищаем экран}

ClrScr;

{Вводим исходный текст}

Write(‘Введите исходный текст: ’); Readln (str);

{Организовываем цикл для посимвольной обработки}

For I:=2 To Length(str) Do

Begin

{Если текущий символ пробел, а перед ним символ «о»}

If (str[I]=' ') And (str[I-1]='о') Then

{то заменяем «о» на «е»}

Str[I-1]:='е';

End;

{Если последний символ во фразе «о»}

If (str[Length(str)]='о') Then

{то заменяем его на «е»}

Str[Length(str)]:='е';

{Выдаем на экран полученную фразу}

Writeln (str);

{Делаем паузу для просмотра}

Readln;

End.

Вопросы для самоконтроля

1.              Назначение строк и их описание в программе;

2.              Ввод и вывод строк;

3.              Присваивание значений строкам;

4.              Слияние строк;

5.              Сравнение строк;

6.              Принцип посимвольной обработки строковой переменной;

7.              Функции по работе со строками