Обработка строковых величин

Цель работы: освоить строковые операции, процедуры и функции; научиться создавать программы обработки текстовых данных.

Общие сведения

Для обработки текстовой информации можно использовать те же методы, что применяют для одномерных массивов, так как структура строкового типа схожа с массивом. Однако для упрощения написания программ по работе с текстами были разработаны стандартные строковые процедуры и функции. Поэтому основной задачей этой лабораторной работы является освоение строковых операций, функций 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.

Наши рекомендации