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

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

Работа с символами и строками






Над строками обычно выполняются следующие операции:

1) объединение двух строк в новую строку (+) – конкатенация,

2) расщепление строки для создания двух новых строк, каждая из которых содержит некоторые из исходных символов,

3) поиск символа или подстроки внутри данной строки.

В компьютере символы могут быть представлены двумя способами.

1. Кодами в виде одиночного символа ‘\N’, где N – число-код соответствующего символа в 10-ричном или 16-ричном представлениях:

S=”\65”

S=”\41”

2. Как строка символов “\N\M\O\”:

S=”abc”- строка

S=”\65\66\67”

S=”\16”

Коды могут быть использованы для получения на экране псевдографических символов/

Строки могут быть присвоены переменным и выведены на печать:

Printstring: – S1=«это пример», S2=«печать».

write(S1), write(S2), nl – печать строки

Пример в виде программы.

domains S1, S2=string predicates datastring(S1, S2) printstring Goal printstring clauses datastring(S1, S2):- S1=”это пример”, S2=”печать”. printstring:- datastring(S1, S2), write(S1), nl, write(S2).  

Фиксированные строковые константы S1, S2 объявляются в разделе доменов. Можно размещать строки в одном правиле, а вызывать и обрабатывать их в других правилах. Правило datastring содержит строки. Для того чтобы передать строки из него в правило printstring первое должно быть включено во второе с явным указанием символов s1, s2 в списке объектов вызываемого правила. Необходимость такого включения определяется отсутствием понятия локальной переменной в Прологе для удержания промежуточных результатов и их применения в процессе вычисления.

Областью определения переменных является правило. В другом правиле эти переменные не видны и недопустимы. Поэтому мы соединяем в одно правило. Для работы со строковыми объектами в Турбо Прологе введены предписанные предикаты.

1. Определение длины строки (количество символов строки): strlen (значение строки, длина строки). Способ действия данного предиката зависит от того, что означено в аргументах. Если длина строки не означена, то она вычисляется, иначе производится сравнение.

Strlen (“abba”, X)

X – неизвестная, результат работы Х=4

Х=3, strlen(“abba”, X), результат неуспех, ложь

2. Конкатенация (сложение строк).

Встроенный предикат concat (X, Y, Z) – объединяет (помещает) X, Y в Z, входные и выходные строки могут быть представлены переменными.

Х = “паро”

Y = “ход”

Тогда Z=”пароход”

3. Получение подстрок.

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

Встроенный предикат Frontstr(N, исходная строка, строка1, строка2) копирует N первых символов из исходной строки в строку 1, остальные символы в строку 2.

4. Преобразование данных к разным типам.

Для преобразования имеются следующие предикаты:

· преобразование строки в символ str_char,

· преобразование строки в число str_int,

· преобразование строки в действительное число str_real,

· преобразование символа в код символа char_int,

· большие буквы переделывает в маленькие Upper_lower.

Эти операторы применяют, когда тип объектов встроенного предиката отличается от типа объектов предиката, определенного пользователем.

Пример. writef – печать форматная.

writef («текущее устройство есть %», drive_str). Этот оператор вызовет отказ системы, если символьная переменная drive_str будет означена символом «а». Чтобы система не выдала ошибки, нужно писать: str_char (drive_str, drive), writef(«текущее устройство есть %», drive).

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

Например, при преобразовании upper_lower(S1, S2) при S1= ”STAR” переменной S2 присваивается значение “star” только в том случае, если она на данный момент не означена (не имеет значение).

Если S2 = ”star”, а S1 не означена, то совершается переход в прописные (большие) буквы.

Пользователь может сам разработать предикаты преобразований:

Real_int, int_ real – удобны для математических расчетов R – real, N – int,

conv_ real _ int (R,N): – R=N,

conv_ int_ real (R,N): – N = R – обратное преобразование,

conv _strsymbol(S, Sb): – S = Sb, где S – строка, Sb – символ.

Это преобразование удобно для обработки данных и записи в памяти.

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

frontchar (строка, символ, остаток строки).

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

Пример: frontchar (“spring”, C, “pring”) – результат: С=’s’.

6. Преобразование строки в список символов, т.е. из строки можно получить список. Для преобразования строки используется frontchar. Метод преобразования заключается в циклическом использовании frontchar для вырезания первого символа и размещении его в список. Правило преобразования записывается в виде:

convert (“”, [ ]) – граничное условие,

convert (str, [H|T]): – frontchar(str,H, str1),

convert(str1, T).

Пример программы.

domains

char_lis=char*

str=string

predicates

convert(str,char_list)

print_list(char_list)

do_convert_and_print

goal

do_convert_and_print.

clauses

convert(“”, [ ]).

convert(Str, [H|T]): – frontchar(Str, H, Str1),convert(Str1, T).

print_list([]).

print_list([H|T]):– write(H, ” “),print_list(T).

do_convert_and_list:- nl, nl, write(“STARS AND”), nl, nl, convert(“Stars AM”, List),

print_list(List), nl, nl, write(“All done”), nl.

 







Дата добавления: 2015-10-19; просмотров: 467. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

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

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

Толкование Конституции Российской Федерации: виды, способы, юридическое значение Толкование права – это специальный вид юридической деятельности по раскрытию смыслового содержания правовых норм, необходимый в процессе как законотворчества, так и реализации права...

Значення творчості Г.Сковороди для розвитку української культури Важливий внесок в історію всієї духовної культури українського народу та її барокової літературно-філософської традиції зробив, зокрема, Григорій Савич Сковорода (1722—1794 pp...

Постинъекционные осложнения, оказать необходимую помощь пациенту I.ОСЛОЖНЕНИЕ: Инфильтрат (уплотнение). II.ПРИЗНАКИ ОСЛОЖНЕНИЯ: Уплотнение...

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

Упражнение Джеффа. Это список вопросов или утверждений, отвечая на которые участник может раскрыть свой внутренний мир перед другими участниками и узнать о других участниках больше...

Влияние первой русской революции 1905-1907 гг. на Казахстан. Революция в России (1905-1907 гг.), дала первый толчок политическому пробуждению трудящихся Казахстана, развитию национально-освободительного рабочего движения против гнета. В Казахстане, находившемся далеко от политических центров Российской империи...

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