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

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

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






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

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; просмотров: 471. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

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

Демографияда "Демографиялық жарылыс" дегеніміз не? Демография (грекше демос — халық) — халықтың құрылымын...

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

ЛЕЧЕБНО-ПРОФИЛАКТИЧЕСКОЙ ПОМОЩИ НАСЕЛЕНИЮ В УСЛОВИЯХ ОМС 001. Основными путями развития поликлинической помощи взрослому населению в новых экономических условиях являются все...

Измерение следующих дефектов: ползун, выщербина, неравномерный прокат, равномерный прокат, кольцевая выработка, откол обода колеса, тонкий гребень, протёртость средней части оси Величину проката определяют с помощью вертикального движка 2 сухаря 3 шаблона 1 по кругу катания...

Неисправности автосцепки, с которыми запрещается постановка вагонов в поезд. Причины саморасцепов ЗАПРЕЩАЕТСЯ: постановка в поезда и следование в них вагонов, у которых автосцепное устройство имеет хотя бы одну из следующих неисправностей: - трещину в корпусе автосцепки, излом деталей механизма...

Понятие метода в психологии. Классификация методов психологии и их характеристика Метод – это путь, способ познания, посредством которого познается предмет науки (С...

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