Строковые процедуры и функции.ppt
- Количество слайдов: 16
Работа со строками. МОУ СОШ № 17 Матвеева А. Г.
Типы строковых данных Строки могут быть представлены следующими типами: shortstring, Longstring и widestring. Различаются эти типы предельно допустимой длиной строки, способом выделения памяти для переменных и методом кодировки символов. Переменной типа shortstring память выделяется статически, т. е. до начала выполнения программы, и количество символов такой строки не может превышать 255. Переменным типа Longstring и widestring память выделяется динамически — во время работы программы, поэтому длина таких строк практически не ограничена. Помимо перечисленных выше типов можно применять универсальный cтроковый тип String. Тип String эквивалентен типу Shortstring.
Операции над строками Строки можно присваивать, объединять, сравнивать. Объединение строк записывается в естественном виде, применяя знак "+". Если сумма получается длинее, чем описана длина левой части оператора присваивания, то излишек отсекается. Пример: st 1: =‘F 1 -‘; st 2: =‘Help‘; st 3: =st 1+st 2; {F 1 - Help}. Сравнение строк - Строки сравниваются посимвольно, начиная с первого символа. Если все символы сравниваемых строк одинаковые, то такие строки считаются равными. Если в одинаковых позициях строк находятся разные символы, большей считается та строка, у которой в этой позиции находится символ с большим кодом. Например: 'asdf '= 'asdf '; 'asdf '> 'asd. F '; ' a. Bcg '< 'ab '; ' ' > ''.
Строковые процедуры и функции Функция Length(s: string): byte - выдает текущую длину строки. Вместо неё можно пользоваться конструкцией ord(s[0]), что то же самое. Функция Concat - производит объединение строк. Вместо неё можно пользоваться операцией "+". Функция copy(s: string; start, len: integer): string - позволяет выделить из строки s последовательность из len символов начиная с символа start. Например: s: ='asdfgj'; st: = copy(s, 2, 3); {st='sdf'} Процедура delete(s: string; start, len: integer) - видоизменяет строку s, стирая len символов, начиная с символа start. Например: s: ='widows'; delete(s, 3, 2); {s: ='wiws'} Процедура insert(st, s: string; start: integer) - вставляет подстроку st в строку s начиная с позиции start (процедура противоположная delete). Функция Pos(Subs, S: string): byte - возвравщает номер символа в строке S, с которого начинается включение в S подстроки subs.
Упражнения 1) Дана строка символов, в которой есть хотя бы одно вхождение 'abc'. Все вхождения 'abc' заменить на 'def‘. 2) В заданном тексте встретившиеся буквы 'a' удалить , а буквы 'd' удвоить.
Задание 1. 1) Дана строка символов, в которой есть хотя бы одно вхождение 'abc'. Все вхождения 'abc' заменить на 'def‘. program upr 1; var i: byte; st, st 1: string; begin readln(st); st 1: ='def'; for i: =1 to length(st) do if copy(st, i, 3)='abc' then begin delete(st, i, 3); insert(st 1, st, i); end; writeln(st); end.
Задача 2. В заданном тексте встретившиеся буквы 'a' удалить , а буквы 'd' удвоить. Program Upr_2 var st, st 1: string; i: integer; begin write('st='); readln(st); i: =1; while i<= length(st) do if st[i]='a' then delete(st, i, 1) else if st[i]='d' then begin insert('d', st, i+1); i: =i+2; end else i: =i+1; writeln(st); end.
Функции преобразования. Str(ch: integer; , st: string; ) - преобразование числового значения величины ch и помещение результата в строку st. После ch можно записывать формат, аналогичный формату вывода. Если в формате указано недостаточное для вывода количество разрядов, поле вывода расширяется автоматически до нужной длины. Например: ch= 3500; str( ch: 6, st); st=' 3500'; ch=45789; str(ch: 3, st); st='45789'.
Val(st: string; , ch: integer; , code: integer; ) - преобразует значение st и помещает результат в ch. Значение st не должно содержать незначащих пробелов в начале и в конце. Code - целочисленная переменная. Если в операции преобразования ошибки не обнаружено, значение code равно нулю, если ошибка обнаружена ( например, литерное значение переводится в цифровое ), code будет содержать номер позиции первого ошибочного символа , а значение ch не определенно. Например: st='6500'; Val(st, ch, code); ch= 6500; code=0; st='34, 01'; val(st, ch, code); ch не определенно; code=3.
Задача. Дан текст, в котором имеется несколько идущих подряд цифр. Получить число, образованное этими цифрами. program upr 1; uses crt; var i, l, y: integer; n: longint; st, st 1: string; begin write('st='); readln(st); l: =length(st); st 1: =''; for i: =1 to l do if (st[i]>='0') and (st[i]<='9') then st 1: =st 1+st[i]; writeln('st 1=', st 1); val(st 1, n, y); writeln('n=', n); end.
Домашнее задание 1. Дано слово. Переставить первые три и последние три буквы, сохранив порядок их следования. 2. Дано предложение. Определить, сколько в нем соседних одинаковых букв. 3. Дан текст. Найти наибольшее количество идущих подряд одинаковых символов. 4. Дано предложение. Все пробелы в нем заменить на ‘-‘. 5. Дано предложение. Заменить в нем все вхождения ‘yes’ на ‘no’. 6. Дан текст, в котором имеется несколько идущих подряд цифр. Получить число, образованное этими цифрами. 7. Дан текст. Найти максимальное, из имеющихся в нем чисел. 8. Дано предложение. Напечатать все символы расположенные между первой и второй запятой. Если второй запятой нет , то напечатать все символы после первой запятой. 9. Дано предложение. Удалить из предложения все буквы ‘f’. 10. Дано слово, в котором только две одинаковые буквы, найдите их. 11. Дано предложение. Подсчитать количество слов начинающихся на букву ‘ s’. 12. Дано предложение. Подсчитать количество слов оканчивающихся на ‘b’. 13. Дано предложение. Удалить в нем все слова, которые начинаются на букву ‘a’.
Решение задач на перевод чисел из одной системы счисления в другую.
Перевод чисел из десятичной системы счисления в двоичную readln(n); { ввод десятичного числа} p: =n; while p>=1 do begin k: = p mod 2; {остатки из которых будет формироваться число в 2 с/с} str (k, st); { перевод остатков в символы} st 1: = st 1 + st; {формирование строки из остатков} p: = p div 2; { уменьшения числа на разряд } end; str(p, st); {перевод последнего частного в символ} st 1: =st 1 + st; {строка из остатков и последнего частного} for i: = length(st 1) downto 1 do { цикл для вывода числа в обратном порядке} begin st 2: = copy(st 1, i, 1); st 3: = st 3 + st 2; {строка в 2 с/с} end; val(st 3, ch, errc); writeln('ch=', ch);
Перевод чисел из двоичной системы в десятичную Фрагмент программы: readln(n); str(n, st); dl: =length(st); dl: =dl-1; for i: =1 to length(st) do begin val(st[i], m, errc); p: = p+ m* exp(dl*ln(2)); dl: = dl-1; end; writeln('p=', p: 6: 0);
Дом. задание 1. 2. 3. Дан текст из строчных латинских букв, за которым следует точка. Напечатать в алфавитном порядке все буквы, которые входят в этот текст по одному разу. Напечатать заданный текст, удалив из него лишние пробелы, т. е. из нескольких подряд идущих пробелов оставить только один. В заданный непустой текст входят только цифры и буквы. Определить, удовлетворяет ли он следующему свойству: текст начинается с k букв (1<=k<=9), за котором следует только одна литера - цифра с числовым значением k
4 Дано натуральное n. Напечатать в троичной системе счисления целые числа от 0 до n. 5 Задано неотрицательное целое число, в восьмеричной системе счисления (за числом - пробел). Напечатать это число в пятеричной системе счисления.
Строковые процедуры и функции.ppt