Обработка строковых величин
Цель работы: освоить строковые операции, процедуры и функции; научиться создавать программы обработки текстовых данных.
Общие сведения
Для обработки текстовой информации можно использовать те же методы, что применяют для одномерных массивов, так как структура строкового типа схожа с массивом. Однако для упрощения написания программ по работе с текстами были разработаны стандартные строковые процедуры и функции. Поэтому основной задачей этой лабораторной работы является освоение строковых операций, функций Length, Pos, Copy и процедур Delete, Insert.
Перед выполнением работы необходимо ознакомиться с теоретическим материалом по теме «Обработка литерных величин. Данные типа Char и String» ([1], с. 73-82).
Пример 1. Составить программу обработки данной строки, позволяющую выписать все знаки сравнения и все скобки, сохранив их последовательность.
Решение. Все знаки сравнения и скобки перечислим в строковой константе srav_sk. В теле программы последовательно рассмотрим все символы введенной строки s, проверяя каждый на вхождение в строку srav_sk, выводя на экран содержащиеся в строковой константе символы строки s.
program string_1;
const srav_sk='<>=(){}[]';
var s:String; i:Integer;
begin
Writeln('Введите строку:'); Readln(s);
for i:=1 to Length(s) do
if Pos(s[i],srav_sk)<>0 then write(s[i]);
Readln
end.
Пример 2. Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Составить программу обработки данной строки, выводящую через запятую слова четной длины, которые при обмене местами левой и правой половины дают то же слово (например, папа, мама, канкан).
Решение. В строке, последовательно перебирая элементы, будем выделять начало ns и конец ks каждого слова, копировать слово в другую строковую переменную, а затем проверять четность длины и равенство частей строки slovo. Слова, для которых выполнено условие задания будем склеивать в переменной otv. После добавления к ответу последнего слова в конце otv будет лишняя запятая, которую перед выводом на экран необходимо удалить.
program string_2;
var s,slovo,otv:String; ns,ks,i,m:Integer;
begin
Writeln('Введите строку:'); Readln(s);
i:=1; ns:=1; otv:=''; s:=s+' ';
while i<=Length(s) do
begin
while (i<=Length(s))and(s[i]<>' ') do i:=i+1; {ищем очередной пробел}
ks:=i; slovo:=Copy(s,ns,ks-ns); {выделяем слово}
m:=Length(slovo) div 2; {половина длины слова}
if (Length(slovo) mod 2=0) and (Copy(slovo,1,m)=Copy(slovo,m+1,m))
{если слово имеет четную длину}
then otv:=otv+slovo+','; {добавляем слово к ответу}
while (i<=Length(s))and(s[i]=' ') do i:=i+1; {пропускаем пробелы}
ns:=i; {начало следующего слова}
end;
Delete(otv,Length(otv),1); {удаляем лишнюю запятую в конце}
Writeln(otv);
Readln
end.
Варианты заданий
Задание 1. Составить программу обработки данной строки, позволяющую:
1) найти количество гласных букв в тексте (учитывать и прописные, и строчные буквы);
2) выписать все гласные буквы из данной строки, сохранив их последовательность (учитывать и прописные, и строчные буквы);
3) выписать все прописные буквы из данной строки в порядке их следования;
4) определить, каких строчных согласных в тексте больше – глухих или звонких;
5) найти количество прописных букв в тексте;
6) определить, содержатся ли в тексте цифры;
7) выписать все цифры, встречающиеся в тексте, сохранив их последовательность;
8) найти количество строчных согласных букв в тексте;
9) найти общее количество круглых, квадратных и фигурных скобок в тексте;
10) выписать из данной строки все символы, отличные от пробелов и букв латинского алфавита, сохранив их последовательность;
11) выписать все знаки препинания из данной строки, сохранив их последовательность;
12) выписать из данной строки все символы, отличные от круглых, квадратных и фигурных скобок, сохранив их последовательность.
Задание 2. Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Составить программу обработки данной строки, выводящую через запятую:
1) слова, одинаково читающиеся справа налево и слева направо;
2) слова текста с удвоенными буквами, например: класс, сумма, ссылка;
3) слова, содержащие одинаковое количество гласных и согласных букв;
4) слова заданной длины, в которые входит данная буква;
5) слова, состоящие из одинаковых символов (например, ааа, ееее и т.п.);
6) слова-аббревиатуры, состоящие только из прописных букв;
7) слова, в которых нет глухих согласных;
8) слова, содержащие хотя бы одну гласную;
9) слова, начинающиеся с прописной буквы, в которых все остальные буквы строчные;
10) слова, которые начинаются и заканчиваются одной и той же буквой и содержат хотя бы одну букву "а";
11) слова, которые содержат ровно три буквы "а";
12) слова, состоящие из букв латинского алфавита.
ПРИЛОЖЕНИЕ
Гласные строчные буквы: a, e, o, u, i, y
Гласные прописные буквы: A, E, O, U, I, Y
Звонкие согласные (указаны только строчные): b, d, g, j, n, m, r, v, z, w
Глухие согласные (указаны только строчные): c, f, h, k, l, q, p, s, t, x
Десятичные цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Дополнительные задания
1. Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Составить программу обработки данной строки, позволяющую:
a) определить количество слов в строке;
b) удалить из строки избыточные пробелы, чтобы между словами осталось только по одному пробелу;
c) найти самое короткое слово и его длину;
2. Инициалы. В строке через пробел указаны имя, отчество и фамилия. Записать строку в следующей форме: фамилия, пробел, инициалы. Например, строка «Александр Иванович Смирнов» должна превратиться в текст «Смирнов А.И.».
3. Дата. Проверить, является ли данная строка верной записью даты в форме ДД.ММ.ГГ. Считать, что в каждом месяце года 30 дней.
Контрольные вопросы
1. Как описываются в языке Паскаль строковые величины?
2. В чем сходство и в чем различие между массивами и строками?
3. Существуют ли ограничения, накладываемые на длину строки?
4. Какие строковые процедуры существуют в языке Паскаль?
5. Перечислите строковые функции.
ЛИТЕРАТУРА
1. Касторнов А.Ф. Евстратова Г.А. Язык программирования Паскаль: Учеб. пособие. – Череповец, 2010.
2. Немнюгин С.А. Turbo Pascal: Программирование на языке высокого уровня: Учебник для вузов. – СПб.: Питер, 2007.
3. Павловская Т.А. Паскаль. Программирование на языке высокого уровня: Учебник для вузов. – СПб.: Питер, 2004.
4. Павловская Т.А. Паскаль. Программирование на языке высокого уровня: Практикум. – СПб.: Питер, 2006.
5. Ставровский А.Б. Турбо Паскаль 7.0: Учебник для вузов. – Киев, 2001.
6. ФароновВ.В.Система программирования Delphi. – СПб., 2006.
7. ФароновВ.В. Турбо Паскаль 7.0: Практика программирования: учебное пособие.-М.: ОМД Групп, 2003.
8. Программирование на языке Паскаль: задачник / под ред. Усковой О.Ф. – СПб.: Питер, 2002.
9. Юркин А.Г. Задачник по программированию. – СПб.: Питер, 2002.