Студопедия — Строковые операции
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Строковые операции






 

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

Все языки программирования высокого уровня, в т.ч. Pascal, имеют средства работы с литерными величинами. В Pascal описаны два типа переменных для литерных величин. Это - String и Char. Переменная типа Char содержит в себе один единственный символ, тип String предназначен для хранения строковых величин до 255 символов длиною. При описании переменной этого типа Вы можете сами указать максимальное число символов, которое можно в нее занести. Однако это число не должно превышать 255. Выполняется это так:

Var
S: String[30];

Ввиду того, что при компиляции для каждой переменной отводится свой участок памяти. Если мы будем выделять для всех переменных типа String по 256 байт, то это приведет к тому, что при использовании достаточно большого их количества, памяти может и не хватить. Но если в переменной мы собираемся хранить, например, фамилию пользователя, то тридцати символов (тридцати байт) вполне достаточно, т.е. экономится память и увеличивается быстродействие программ.

Переменным строкового типа можно присваивать строковые величины (внутри программы они заключаются в апострофы), значения выражений, которые приводят к строковым величинам. Значения можно вводить с клавиатуры. При этом апострофы не используются. Известно, что в числовую переменную нельзя ввести строковую величину. Сделать наоборот можно, но число, находящееся в строковой переменной, будет представлять собой просто последовательность символов (цифр) и в арифметических выражениях участвовать не может.

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

Например: S[5] - пятый символ строки S.

С отдельным символом строки производятся те же действия, производимые с любой символьной переменной (ввод, присвоение, вывод на экран, участие в выражениях и т.д.).

Нумерация символов в строке начинается с единицы. Внутри квадратных скобок вместо числа может находиться выражение, результатом которого является целое число. Главное, чтобы символ с таким номером в строке существовал.

Как узнать, сколько символов в данный момент находится в строковой переменной? Для этого существует функция Length(S), которая возвращает длину строковой переменной в символах, где S - строковая величина или переменная.

Пример 2: Вывод на экран длины введенной пользователем строковой величины.

Program Str1;
Var
S: String;
Begin

Writeln('Введите последовательность символов');
Readln(S);
Writeln('Вы ввели строку из ', Length(S), ' символов')

End.

Пример 3: Введенную строку вывести на экран по одному символу в строке экрана.

Program Str2;
Var

S: String;
I: Byte;

Begin

Writeln('Введите строку');
Readln(S);
For I: =1 to Length(S) do {организуем цикл, начиная с первого символа}
Writeln(S[I]) {строки, до последнего (номер последнего}
{совпадает с количеством символов строки S) }

End.

Действия, выполняемые с переменными строкового типа:

Конкатенация - операция состыковки двух строковых величин. Обозначается знаком " +".

Например: результатом выполнения следующих команд:
R: = 'kadabra';
H: = 'abra';
S: =H+R;
в переменной S будет значение 'abrakadabra'.

В отличие от операции сложения для конкатенации результат зависит от порядка операндов. При превышении значения выражения максимальной длины результирующей переменной, «лишние» символы в переменную String не войдут.

Сравнение - операция сопоставления строковых величины или переменных, при которой большей из двух считается та, код которой больше.

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

Если начало строк совпадает, а одна из них заканчается раньше, то вторая автоматически называется большей.

Код символа в Pascal определяется по функции Ord(C), где С - непосредственно указанный символ либо переменная символьного типа, либо один символ строковой переменной.

Есть и обратная функция Chr(N), которая возвращает символ по известному коду, где N - выражение, приводящее к целому числу в интервале от 0 до 255 (возможные значения кода символа). Очевидно, что Chr(Ord(C))=C, Ord(Chr(N))=N.

Пример 4: Вывод на экран кодовой таблицы:

Program Str3;
Var
I: Byte;
Begin

For I: =32 to 255 do
Write('VV', I: 4, '-', Chr(I))

End.

Цикл в программе начинается с 32 потому, что символы с кодами от 0 до 31 являются управляющими и не имеют соответствующего графического представления.

Пример 5: Определить, является ли введенная строка «перевертышем». Перевертышем называется строка, одинаково читаемая с начала и с конца. Например, казак или потоп.

Из введенной строки сформируем другую строку из символов первой, записанных в обратном порядке, затем сравним первую строку со второй; если строки окажутся равными, то ответ положительный, если нет - отрицательный.

Program Str4;
Var
S, B: String;
I: Byte;
Begin

Writeln('Введите строку');
Readln(S);
B: =''; {B присваиваем значение " пустая строка" }
For I: =1 to Length(S) do
B: =S[I]+B; {Конкатенация. Символы строки S пристыковываются к переменной B слева. Левым окажется последний.}
If B=S Then Writeln('Перевертыш') Else Writeln('Не перевертыш')

End.

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

Преобразование типа - перевод строкового представления числа в числовое. Выполняется оператором Val(S, X, C),

где S - строка, содержащая число, X - числовая переменная, в которую будет помещен результат, С - переменная целочисленного типа, в которую помещается первый отличный от цифры символ, встреченный в переменной S. Если после выполнения оператора Val переменная С имеет значение 0, то это означает, что преобразование типа прошло совершенно успешно и в строке нецифровых символов не встретилось.

Противоположное действие выполняет оператор Str(X, S),

где X - число либо арифметическое выражение, S - строковая переменная. В переменную S попадает строковое представление числа X. Это нужно, например, для вывода на экран числа в графическом режиме, т.к. стандартные процедуры вывода на экран там работают только со строковыми величинами.

Пример 6: Найти сумму цифр натурального числа.

Program Str5;
Var

S: String;
I, X, A, C: Integer;

Begin

Writeln('Введите натуральное число');
Readln(S); {Число вводится в строковую переменную}
A: =0;
For I: =1 To Length(S) Do
Begin

Val(S[I], X, C); {Цифровой символ превращается в число}
A: =A+X {Цифры суммируются}

End;
Writeln('Сумма цифр равна ', A)

End.

Рассмотрим еще несколько действий над строками:

· DELETE(S, I, C) - оператор из строковой переменной S удаляет C символов, начиная с I-того;

· INSERT(SN, S, I) - оператор вставляет подстроку SN в строковую переменную S перед символом с номером I;

· COPY(S, I, C) - функция возвращает подстроку строки S из C символов, начиная с символа с номером I;

· Pos(SN, S) - функция возвращает номер символа, с которого в строке S начинается подстрока SN (позицию первого вхождения подстроки в строку). Если такой подстроки нет, то возвращается ноль.

Пример 7: Во введенной строке заменить все вхождения подстроки 'ABC' на подстроки 'KLMNO'.

Program Str6;
Var

S: String;
A: Byte;

Begin

Writeln('Введите строку');
Readln(S);
While Pos('ABC', S)< > 0 Do
Begin

A: = Pos('ABC', S);
Delete(S, A, 3);
Insert('KLMNO', S, A)

End;
Writeln(S)

End.

 

Типы

 

Тип - множество величин, объединенных определенной совокупностью допустимых операций либо набор значений, которые переменная может принимать.Типы данных делятся на две группы: скалярные (простые) и структурированные (составные). Простые типы - упорядоченные множества значений, не содержащие составных частей. Порядковые типы - подмножество простых типов.Скалярные (простые) типы делятся на: стандартные и пользовательские. Стандартные: целочисленные, вещественные, символьные (литерные), булевские. Пользовательские: перечисляемый и интервальный. Целочисленные - типы, используемые в арифметических выражениях и занимающие в памяти от 1 до 4 байт.

Вещественные - типы, используемые в арифметических выражениях и занимающие в памяти от 4 до 6 байт.

Символьные (char) - литерные символы, упорядоченные в соответствии с расширенным набором символов кода ASCII.

При вызове функции Ord(Ch), где Ch - значение символьного типа, возвращается порядковый номер Ch. Строковая константа с длиной 1 обозначает значение константы символьного типа. Любое значение символьного типа может быть получено с помощью функции Chr.

Булевские - тип данных, представляемый двумя значениями: True (истина) и False (ложь)

Описание типа определяет идентификатор, который обозначает этот тип. Указание идентификатора в левой части описания типа означает, что он определен как идентификатор типа для блока, в котором указано это описание типа. Область действия идентификатора типа не включает его самого, исключение составляют типы «указатель» (ссылочные типы).

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

Все возможные значения данного порядкового типа - упорядоченное множество, и каждое возможное значение связано с порядковым номером, который представляет собой целочисленное значение. За исключением значений целочисленного типа, первое значение любого порядкового типа имеет порядковый номер 0, следующее значение имеет порядковый номер 1 и т.д. для каждого значения в этом порядковом типе. Порядковым номером значения целочисленного типа является само это значение. В любом порядковом типе каждому значению, кроме первого, предшествует другое значение, и после каждого значения, кроме последнего, следует другое значение в соответствии с упорядоченностью типа. К любому значению порядкового типа применима функция Ord, возвращающая порядковый номер значения. К любому значению порядкового типа применима функция Pred, возвращающая предшествующее значение.Если эта функция применяется к первому значению в этом порядковом типе, то выдается сообщение об ошибке. К любому значению порядкового типа применима функция Succ, возвращающая следующее значение.Если эта функция применяется к последнему значению в этом порядковом типе, то выдается сообщение об ошибке. К любому значению порядкового типа и к ссылке на переменную порядкового типа применима функция Low, возвращающая наименьшее значение в диапазоне данного типа. К любому значению порядкового типа и к ссылке на переменную порядкового типа применима функция High, возвращающая наибольшее значение в диапазоне данного типа.Существуют следующие встроенные порядковые типы: Integer (целое), Shortint (короткое целое), Longint (длинное целое), Byte (длиной в байт), Word (длиной в слово), Boolean (булевское), ByteBool (булевское размером в байт), WordBool (булевское размером в слово), LongBool (длинный булевский тип) и Char (символьный тип). Как предопределенные целочисленные типы используются Integer, Shortint, Longint, Byte и Word. Каждый тип обозначает определенное подмножество целых чисел.Существуют предопределенные булевские типы: Boolean, ByteBool, WordBool и LongBool. Значения булевского типа обозначаются встроенными идентификаторами констант False и True. Поскольку булевский тип является перечислимым, между этими значениями имеют место отношения: - False < True- Ord(False) = 0- Ord(True) = 1- Succ(False) = True- Pred(True) = FalseПеременные типа Boolean и ByteBool занимают 1 байт, WordBool - два байта (слово), а LongBool - четыре байта (два слова). ByteBool, WordBool и LongBool обеспечивают совместимость с другими языками и средой Windows. Boolean - наиболее предпочтительный тип, использующий меньше памяти. Предполагается, что переменная типа Boolean имеет порядковые значения 0 и 1, но переменные типа ByteBool, WordBool и LongBool могут иметь другие порядковые значения. Когда выражение типа ByteBool, WordBool или LongBool равно 1, то подразумевается, что оно имеет значение True, а если оно равно 0 - то False. Когда значение типа ByteBool, WordBool или LongBool используется в контексте, где ожидается значение Boolean, компилятор будет автоматически генерировать код, преобразующий любое ненулевое значение в значение True.

В Pascal можно определять новые типы переменных. После определения тип становится доступным для описания переменных, так же как и стандартные типы. Новый тип перед первым его использованием должен быть описан в соответствующем разделе описаний. Его заголовок - слово Type.

Type

< Имя типа> = < Описание типа>;

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

Этот тип представляет собой набор идентификаторов, с которыми могут совпадать значения параметров. Формат описания: < Имя типа> = (< Ид.1>, < Ид.2>,? < Ид.n>); Далее можно определить любое число переменных уже описанного типа. Обратите внимание на то, что каждый идентификатор может участвовать в описании только одного перечисляемого типа.

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

Ord(X) - порядковый номер значения переменной X в списке идентификаторов.

Succ(X) - следующее значение для величины Х.
Pred(X) - предыдущее значение данного типа.

Для функции Ord нумерация среди значений идет, начиная от нуля. Для последнего значения нельзя применять функцию Succ, для первого - Pred. Переменные различных перечисляемых типов несовместимы друг с другом.

Множество стандартных порядковых типов в Pascal определены как перечисляемые. Это типы Char, Integer и др. Достоинства стандартных порядковых типов состоят в том, что над каждым из них уже определены специфические действия.

Например, тип Boolean описывается так:

Type
Boolean = (False, True);

Единственное его отличие от перечисляемых типов, определяемых программистом, состоит в том, что значения типа Boolean можно выводить на экран: Ord(False)=0.

Пример 8: Использовать переменную перечисляемого типа в качестве счетчика в цикле «с параметром».

Program T1;
Type
Colors = (Black, Blue, Green, Cyan, Red, Magenta, Brown, Yellow, White);
Var
C1, C2: Colors;
Begin

C1: =Green;
C2: =Red;
Writeln(Ord(C1), Ord(Succ(C2)))

End.

Во время выполнения на экране появятся числа «2» и «5», что соответствует номерам значений Green и Magenta.

Тип-диапазон - позволяет задавать константы, определяющие границы диапазона значений для данной переменной.

Для этого типа возможными являются значения поддиапазона уже определенного до него порядкового типа (стандартного, перечисляемого). Достаточно указать начальную и конечную величину отрезка порядкового типа с условием, что начальное значение не превышает конечное.

Формат описания отрезочного типа:

Type
< Имя типа> =< Нач.>..< Кон.>;

Например:
Type

Age=0..150; {Целое число в интервале от 0 до 150}
Lat='A'.. 'Z'; {Заглавные буквы латинского алфавита}
Month=(January, February, March, April, May, June, July, August, September, October, November, December);
Spring=March..May; {Весенние месяцы}

Есть еще одна возможность определить новый тип.

Type
< Имя типа> =< Имя ранее определенного или стандартного типа>;

Например:
Type
Number=Byte;







Дата добавления: 2014-11-12; просмотров: 1233. Нарушение авторских прав; Мы поможем в написании вашей работы!



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

ТЕХНИКА ПОСЕВА, МЕТОДЫ ВЫДЕЛЕНИЯ ЧИСТЫХ КУЛЬТУР И КУЛЬТУРАЛЬНЫЕ СВОЙСТВА МИКРООРГАНИЗМОВ. ОПРЕДЕЛЕНИЕ КОЛИЧЕСТВА БАКТЕРИЙ Цель занятия. Освоить технику посева микроорганизмов на плотные и жидкие питательные среды и методы выделения чис­тых бактериальных культур. Ознакомить студентов с основными культуральными характеристиками микроорганизмов и методами определения...

САНИТАРНО-МИКРОБИОЛОГИЧЕСКОЕ ИССЛЕДОВАНИЕ ВОДЫ, ВОЗДУХА И ПОЧВЫ Цель занятия.Ознакомить студентов с основными методами и показателями...

Меры безопасности при обращении с оружием и боеприпасами 64. Получение (сдача) оружия и боеприпасов для проведения стрельб осуществляется в установленном порядке[1]. 65. Безопасность при проведении стрельб обеспечивается...

Алгоритм выполнения манипуляции Приемы наружного акушерского исследования. Приемы Леопольда – Левицкого. Цель...

ИГРЫ НА ТАКТИЛЬНОЕ ВЗАИМОДЕЙСТВИЕ Методические рекомендации по проведению игр на тактильное взаимодействие...

Реформы П.А.Столыпина Сегодня уже никто не сомневается в том, что экономическая политика П...

Studopedia.info - Студопедия - 2014-2024 год . (0.015 сек.) русская версия | украинская версия