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

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

Читайте также:
  1. I. ЛАБОРАТОРНАЯ РАБОТА
  2. II. Работа с одаренными детьми г. Ярославль
  3. IY. РАБОТА С ДЕТЬМИ.
  4. K6/М1] Практическая работа
  5. Kто может работать в Польше без разрешения на работу?
  6. V. Требования к конкурсным работам.
  7. А мне нет времени ходить в церковь. Хозяйство, дети, работа, телевизор, да и еще куча всяких дел. Нет времени.

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

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-09-06; просмотров: 86 | Нарушение авторских прав


Читайте в этой же книге: Элементы теории формальных языков | Элементы семиотики | Модель непосредственных составляющих | Расширенные сети переходов | Глубинные (семантические) падежи | Пакет Turbo Prolog | Поиск решений | Метод отсечения и отката (ОО). | Методы организации рекурсии | Отладка программы и обнаружение ошибок |
<== предыдущая страница | следующая страница ==>
Создание графического режима.| Специальные строки

mybiblioteka.su - 2015-2024 год. (0.01 сек.)