Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Встроенные функции и процедуры для обработки строк



LENGTH (s) - функция выдает в байтах длину строки s: string, измеряемую в символах.

Например, функция LENGTH(st), где St = 'ABBCCD' возвратит значение 6.

CONCAT (s1, s2,..., sN) – функция осуществляет сцепление строк s1, s2, ..., sN: string и выдает результат в виде одной общей строки. Например:

St: = '1a'; S3: =Concat(St, 'bc'); аналог S3: = St+'bc' S3 = '1abc'.

COPY (S, Start, Len) - функция выдает подстроку типа string из строки S: string длиной Len: integer, начиная с символа с номером Start: integer.

Если Start > Length(S) (больше длины всей строки S), то функция вернет пустую строку; если Start> 255, то возникает ошибка. Если Len больше, чем число символов от позиции Start до конца строки S, то вернется остаток строки S от Start до конца. Например, для выражения COPY('ABCDEF', 2, 3) результатом является строка 'BCD'.

DELETE (S, Start, Len) - процедура возвращает строку S: string, удаляя из неё подстроку длиной Len: integer, начиная с символа с номером Start: integer.

После стирания подстроки ее оставшиеся части " склеиваются". Если Start=0 или превышает длину строки S, то строка не изменяется. Не из­менит строку и значение Len=0. При Len большем, чем остаток строки, будет удалена подстрока от Start до конца S. Например, для

Delete('aбвгде', 4, 2); // результатом будет строка - “абве”.

INSERT (Subs, S, index) - процедура возвращает строку S: string, вставляя в неё подстроку Subs: string, начиная с символа под номеpом index: integer;

Если измененная строка S оказывается слишком длинной, то она ав­томатически укорачивается до объявленной длины S (при этом всегда те­ряются символы справа). Например,

st: = 'abcdef';

Insert( '-***-', st, 4); // результат - строка: St = 'abc-***- de'

POS (Subs, S) - функция типа byte отыскивает вхождение подстроки Subs: string в строке S: string и выдает номер позиции, с которой начинается это вхождение.

Если строка s не содержит данной подстроки, то функция POS выдает 0. Если в строке s несколько одинаковых подстрок subs, то функция выдает только номер первого вхождения. Например, для строки St = 'abcdef' результатом функций

POS( 'de', St); является значение 4,

POS( 'k', St); является значение 0.

STR ( x [: w[: n]], s) - процедура преобразует числовое значение x в строковое s: string, возвращая строку s.

Х может быть переменной или выражением целого или вещест­венного типа. Для переменной x может быть указана ширина поля w, кото­рое она занимает, а также n - количество знаков после десятичной точ­ки. Параметры [: w[: n]] не обязательны. Если параметр n отсутствует для вещественного типа, то используется экспоненциальное представле­ние. Если w больше, чем реальное количество знаков в числе, то произ­водится выравнивание числа по правому краю. Для выравнивания по левому краю используется отрицательное значение w. Если в дробной части числа x знаков больше, чем указано в n, выполняется округление.

Например:

str(6.66: 8: 1, s); {результат: S= '6.7' c округлением}

str(6.66: -8: 2, s); {результат: S= '6.66'}

VAL (S, x, ErrCod) - процедура преобразует числовую строку S: string в числовую переменную x (типа Real или Integer) и формирует код ошибки ErrCod: Integer, возвращая x и ErrCod.

Строка S не долж­на содержать незначащих пробелов, в том числе в начале и конце. ErrCod - целочисленная переменная. Она равна 0, если преобразование выполне­но. В противном случае (если преобразование невозможно) эта функция выдает код символа, на котором прекратилось преобразование, значение x в этом случае не определено. Если в строке S имеется десятичная точка или символ E, то переменная x должна быть определена вещественной.

Например:

VAL( '1324', x, Cod); // результат преобразования x = 1324, Cod=0;

VAL( '13.24Е2', x, Cod); // результат преобразования x = 1324, Cod=0;

VAL( '25А3', x, Cod); // результат не определен, Cod=3.

9.3. Пример и задания для обработки строк

Пример. Ввести строку st1. Сформировать строку st2 перестановкой символов исходной строки в обратном порядке и заменой всех строчных латинских букв прописными.

Program lr_10;

Var i, j: byte;

st1, st2: string; {эквивалентно string[255]}

Begin

writeln(‘введи строку’);

readln (st1);

writeln(‘исходная строка: ’, st1);

j: = LENGTH(st1); {максимальный индекс элемента в строке}

for i: =1 to ord( st1[0] ) do

begin

st2[i]: = UPCASE(st1[j]);

j: = j-1

end;

st2[0] = st1[0]; {запись символа с кодом, равным длине строки}

write(‘искомая строка: ’, st2 );

writeln {перевод строки}

END.

Задания для самостоятельного выполнения

1. Дана строка, содержащая не более двадцати латинских букв. Все вхождения «max» в ней заменить на «min» и «макс» на «мин». Подсчитать число таких замен.

2. Дана строка, содержащая сорок латинских букв. Подсчитать все вхождения «abc» в строку и их удалить. Вывести на экран два варианта полученных строк, заполняя образовавшуюся «дыру» последующими буквами с добавлением в конце пробелов и оставляя на месте удаленных символов пробелы.

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

4. Определить номера позиций гласных букв в заданном тексте.

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

6. Дана строка, состоящая из слов, разделенных пробелами, в конце строки – точка. Определить, сколько в строке слов, содержащих четное число символов.

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

8. Дан непустой текст из строчных букв, за которыми следует точка. Определить, упорядочены ли эти буквы по алфавиту. Напечатать результат проверки и исходный текст прописными буквами.

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

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

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

12. В заданном тексте (слова разделены пробелами) поменять местами первое и последнее слово.

13. Даны числа K и текст из слов, разделенных пробелами, в конце – точка. Определить количество слов в тексте, состоящих из K букв.

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

15. Дана последовательность, содержащая от двух до десяти слов, в каждом из которых от одной до пяти строчных букв; между соседними словами – запятая, за последним словом – точка. Напечатать эту же последовательность слов, но в обратном порядке.

16. В заданный текст входят только цифры и буквы. Определить, является ли текст десятичной, шестнадцатеричной или двоичной записью целого либо вещественного числа (указать при выводе какого).

17. В заданном тексте найти и, если есть, напечатать все слова-палиндромы (слова, которые одинаково читаются слева направо и справа налево).

18. Дан текст из слов, разделенных пробелами, в конце – точка. Найти слово наименьшей длины (содержащее наименьшее количество букв).

19. Разработать программу шифровки – дешифровки текста путем замены каждой буквы текста другой буквой, с кодом на N больше (меньше) исходной.

20. Дана непустая последовательность слов, в каждом из которых от одной до шести букв; между соседними словами – запятая, за последним – точка. Напечатать те слова, у которых одинаковые «соседи». (Написать процедуру, которая вводит очередное слово и присваивает его литерной строке, а запятую или точку присваивает некоторой глобальной переменной).

 

ФАЙЛЫ

Файл - именованная область внешней памяти ПК. Файлом может назы­ваться логическое устройство, потенциальный источник или приемник ин­формации.

Файл характеризуется именем и содержит компоненты одного ти­па (может быть любой тип, кроме файлов). Длина вновь создаваемого файла не указывается при его объявлении.

В Pascal ABC различают типизированные и текстовые файлы. Определяются файловые типы в блоке TYPE следующим способом:

Type

< имя> = FILE OF < тип>; {типизированный}

< имя> = TEXT; {текстовый}

где < имя > - имя файлового типа (правильный идентификатор);

FILE, OF - зарезервированные слова (файл, из),

TEXT - имя стандартного типа для текстовых файлов;

< тип > - любой тип, кроме файлового.

Например:

TYPE

FIL = file of char; {файл символов}

text30 = file of string[30] ; {файл строк }

Вид файла определяет способ хранения информации в файле.

Переменные файловых типов объявляются в разделе VAR:

VAR f: FIL;

ff: text30; а также

f1: TEXT; {переменная для текстового файла }

f2: file of real; {переменная файла вещественных чисел}

т. е. сразу можно описывать файловые переменные без объявления типа, например:

VAR

< имя_переменной>: TEXT;

< имя_переменной>: FILE OF < тип>;

Некоторые файлы могут только вводить информацию (клавиатура), другие - только принимать ее (устройства печати), третьи позволяют и считывать, и записывать (файл на диске). Именно с помощью файловой системы осуществляется весь ввод и вывод информации в программе.

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

 

Процедура связывания файлов

Связывание выполняется стандартной процедурой ASSIGN:

ASSIGN (< файловая_переменная> , < имя_файла);

где < файловая_переменная> - правильный идентификатор, объявленный как переменная файлового типа; < имя _ файла> - текстовое выражение, содержащее имя файла (заключается в апост­рофы).

Пример. VAR f, f1, f2: text; {объявление файловых переменных}

Begin

ASSIGN(f, ' nameF.txt '); // связывание с файлом nameF.txt

< Имя_файла> - это любое выражение строкового типа, которое стро­ится по правилам определения имен в MS DOS:

- содержит до 8 разрешенных символов: прописные и строчные ла­тинские буквы, цифры и следующие символы! @ # $ % ^ & ( ) ' ~ - _;

- начинается с любого разрешенного символа;

- за именем может следовать расширение - последовательность до трех разрешенных символов. Расширение, если оно есть, отделяется от имени точкой, например: Lab1.pas или date.txt.

Имя физического файла должно быть корректным и уникальным. Нельзя вставлять символы шаблонов '*' и '? ' в имя файла, но можно связывать файловые переменные с несуществующими пока на диске файлами (для их создания).

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

Имя диска - это один из символов А: В: С: ... Z. При этом А: и В: относят­ся к дисковым накопителям на гибких дискетах, а С:, D: и другие – к жестким и виртуальным дискам. Если имя диска не указано, то по умолчанию подразумевается устройство, установленное в операционной системе перед нача­лом работы программы. Максимальная длина имени пути с файлом - 79 символов, например:

VAR

f1, f2: text;

Begin

...

Assign( f1, 'd: \V-129\date.txt ' );

Assign( f2, name.dat); {файл в текущем каталоге}

Однажды установленная связь процедурой Assign между файловой пе­ременной f и физическим файлом сохраняется до следующего вызова Assign с той же файловой переменной f. То есть можно проделывать различные операции с файлом, лишь один раз связав его с файловой переменной f. Для инициализации файла необходимо указать имя физического файла и направление передачи данных. В Pascal ABC можно открыть файл для чтения, за­писи, а также для чтения и записи одновременно.


Поделиться:



Последнее изменение этой страницы: 2017-03-16; Просмотров: 450; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.03 с.)
Главная | Случайная страница | Обратная связь