Лекция
Тема: «Обработка строковых переменных в программах на 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}
Эта особенность положена в основу сортировки и поиска текстовой информации в базах данных.
Раз тип 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;
{Очищаем экран}
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;
{Очищаем экран}
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;
{Очищаем экран}
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;
{Очищаем экран}
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. Функции по работе со строками