Конспект урока по информатике по теме "Строковый тип данных на ABС Pascal"
Строка (строковый тип данных) – это последовательность символов длиной N, где 1<=N<=255.
Для определения данных строкового типа используется идентификатор string. Если за идентификатором string следует значение максимальной длины строки данного типа (заключенное в квадратные скобки), то такой тип компилятором рассматривается как произвольный, если же длина строки не указана (в этом случае она равна максимальной величине – 255), то тип считается стандартным.
Описание переменной произвольного типа:
· Описание переменной стандартного типа:
Элементы строки определяются именем строки с индексом, заключенным в квадратные скобки. Например, S[3]. Первый символ строки имеет номер 1 и т. д. Можно сказать, что строка представляет собой одномерный массив, элементами которого являются символы. Тип string и тип char совместимы, они могут употребляться в одних и тех же выражениях.
Строковые данные могут использоваться в качестве констант.
Строковая константа – последовательность символов, заключенная в апострофы. Например, ‘237’, ‘это строковая константа’.
Строку можно обрабатывать двумя способами:
1. как одномерный массив символов;
2. как единый объект.
Операции, определенные над строковыми переменными
1. Операции присваивания.
s1:=s; если длина s>s1, то лишние символы будут отброшены
Правила сравнения строк:
1) Сравнение строк производится посимвольно в соответствии с их кодами слева направо до первого несовпадающего символа. Строка считается больше, если в ней первый несовпадающий символ имеет больший номер в таблице кодов.
2) Если строки имеют различную длину, но в общей части символы совпадают, то более короткая строка меньше.
3) Строки равны, если они полностью совпадают, т. е. совпадают длины и содержание.
Полную информацию смотрите в файле.
Содержимое разработкиСтроковый тип данных в В PascalABC
Строка (строковый тип данных) – это последовательность символов длиной N, где 1.
Для определения данных строкового типа используется идентификатор string. Если за идентификатором string следует значение максимальной длины строки данного типа (заключенное в квадратные скобки), то такой тип компилятором рассматривается как произвольный, если же длина строки не указана (в этом случае она равна максимальной величине – 255), то тип считается стандартным.
Описание переменной произвольного типа:
Type TS=string[80];
Описание переменной стандартного типа:
Var s,s1:string;
0 1 2 3 4 n номер байта
В нулевом байте находится текущая длина строки
Элементы строки определяются именем строки с индексом, заключенным в квадратные скобки. Например, S[3]. Первый символ строки имеет номер 1 и т.д. Можно сказать, что строка представляет собой одномерный массив, элементами которого являются символы. Тип string и тип char совместимы, они могут употребляться в одних и тех же выражениях.
Строковые данные могут использоваться в качестве констант.
Строковая константа – последовательность символов, заключенная в апострофы. Например, ‘237’, ‘это строковая константа’.
Строку можно обрабатывать двумя способами:
как одномерный массив символов;
как единый объект.
Операции, определенные над строковыми переменными
s1:=s; если длина ss1, то лишние символы будут отброшены
Операции сравнения (отношения) =, , , =.
Правила сравнения строк:
1)Сравнение строк производится посимвольно в соответствии с их кодами слева направо до первого несовпадающего символа. Строка считается больше, если в ней первый несовпадающий символ имеет больший номер в таблице кодов.
2)Если строки имеют различную длину, но в общей части символы совпадают, то более короткая строка меньше.
3)Строки равны, если они полностью совпадают, т.е. совпадают длины и содержание.
Например, ‘Маска’ = ’Маска’.
Сложение (конкатенация) строк.
Операция сцепления (+) применяется для соединения нескольких строк в одну строку. Сцеплять можно и константы, и переменные. Длина результирующей строки не должна превышать 255 символов.
Строки можно вводить и выводить как одномерный массив в цикле.
For i:=1 to n do read(s[i]); readln;
For i:=1 to n do write(s[i]); writeln;
Как единый объект.
Ввод строки: readln(s);
Если будет введено меньше символов, чем задано при описании строки, то в нулевом байте установится текущая длина строки.
Вывод строки: writeln(s);
5. Стандартные процедуры и функции.
Для обработки строковых данных можно использовать специальные процедуры и функции.
При их использовании динамически меняется текущая длина строки.
1) Процедура Delete(var St:string; poz, n:byte) – удаление n символов строки St, начиная с позиции Poz.
2) Процедура Insert (S1 :string; var S2 :string; Poz:byte) – вставка строки S1 в строку S2, начиная с позиции Poz.
3) Процедура Str(N: ; var St:string) – преобразование числового значения N в строковый и помещение результата в строку St.
4) Процедура Val(St:string; var N: ; var Code:byte) – преобразует значение St в величину целочисленного или вещественного типа и помещает результат в N. Code – целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Code равно 0, если же обнаружена ошибка, то Code будет содержать номер позиции первого ошибочного символа, а значение N не определено.
5) Функция Copy(S:string; Poz, N:byte):string; – выделяет из строки S подстроку длиной N символов, начиная с позиции Poz.
6) Функция Concat(S1,S2,…,Sn:string):string; – выполняет сцепление строк S1,S2,…,Sn в одну строку.
Concat(‘Мама ’,’мыла ’,’раму’)
7) Функция Length(S:string):byte; – определяет текущую длину строки S.
8) Функция Pos(S1,S2:string):byte;– определяет первое появление в строке S2 подстроки S1.
Замечание: В PascalABC добавлены следующие процедуры и функции:
SetLength(var s:string; n:byte); - устанавливает в строке s длину, равную n.
IntToStr(i:integer):string; - преобразует целое число в строку.
StrToInt(s:string):integer; - преобразует строку в целое число. Если преобразование невозможно, то возникает ошибка времени выполнения.
FloatToStr(x:real):string; - преобразует вещественное число в строку.
StrToFloat(s:string):real; - преобразует строку в вещественное число. Если преобразование невозможно, то возникает ошибка времени выполнения.
UpperCase(s:string):string; - возвращает строку s, преобразованную к верхнему регистру.
LowerCase(s:string):string; - возвращает строку s, преобразованную к нижнему регистру.
Trim(s:string):string; - возвращает копию строки s с удаленными лидирующими и заключительными пробелами.
TrimLeft(s:string):string; - возвращает копию строки s с удаленными лидирующими пробелами.
TrimRight(s:string):string; - возвращает копию строки s с удаленными заключительными пробелами.
Пример. Из данной символьной строки выбрать все цифры и сформировать другую строку из этих цифр, сохранив их последовательность.
Var S1, S2:string;
For i:=1 to length(S1) do
If (S1[i]=’0’) and (S1[i]
Пример. Дана строка символов, удалить все лишние пробелы.
Работа со строкой как с одномерным массивом ( в этом случае текущая длина строки динамически не меняется):
begin writeln(‘input st’);
for i:=2 to length(st) do
if (st[i]st[j]) or (st[j]’ ‘) then
for i:=1 to j do write(st[i]); writeln;
Работа со строкой как с единым объектом массивом ( в этом случае текущая длина строки динамически меняется):
Begin writeln(‘input st’);
while pos(‘ ‘,st)0 do delete(st,pos(‘ ‘,st),1);
Как преобразовать эту программу, чтобы не было пробелов в начале и в конце строки?
Begin writeln(‘input st’);
while pos(‘ ‘,st)0 do delete(st,pos(‘ ‘,st),1);
if st[1]=' ' then delete(st,1,1);
if st[length(st)]=’ ‘ then delete(st,length(st),1);
В PascalABC эта задача упрощается:
Begin writeln(‘input st’);
while pos(‘ ‘,st)0 do delete(st,pos(‘ ‘,st),1);
Замечание: Если это решение задачи оформить в виде процедуры, то любую строку можно привести к правильному виду, т.е. к строке, у которой все слова разделены одним пробелом и нет лишних пробелов в начале и в конце строки. Это позволит решение большинства задач на строки привести к одному алгоритму:
Begin writeln(‘input s’);
While pos(‘ ‘,s)0 do
Begin s1:=copy(s,1,pos(‘ ‘,s)-1);
Задача 2. Найти в строке слово максимальной длины.
While pos(‘ ‘,s)0 do
Begin if length(copy(s,1,pos(‘ ‘,s)-1)) max then max:= length(copy(s,1,pos(‘ ‘,s)-1));
Begin writeln(‘input s’);
Замечание: В задаче использовалась правильная строка. В противном случае надо ее привести к этому виду, удалив лишние пробелы (решение см. выше) и оформив это в виде процедуры. Лучше эту процедуру включить в свой модуль.
Список задач на строковый тип.
1. Дана строка символов. Подсчитать количество слов в строке. Оформить в виде процедуры или функции.
2. Дана строка символов. Найти слово максимальной длины. Оформить в виде процедуры или функции.
3. Дана строка символов. Найти слово минимальной длины. Оформить в виде процедуры или функции.
4. Дана строка символов. Удалить из строки все слова, начинающиеся на "pro". Оформить в виде процедуры или функции.
5. Дана строка символов. Удалить из строки все символы цифр. Оформить в виде процедуры или функции.
6. Дана строка символов. Удалить из нее текст, заключенный в . Считать, что такое сочетание встречается в строке только один раз.
7. Дана строка символов. Определить, есть ли в ней слова, начинающиеся и оканчивающиеся на одну и ту же букву. Оформить в виде процедуры или функции.
8. Дана строка символов. Определить есть ли в ней слова-палиндромы. Оформить в виде процедуры или функции.
9. Дана строка символов. Заменить символы "I", "2", "3" словами "один", "два", "три". Оформить в виде процедуры или функции.
10. Написать процедуру, которая вставляет указанный символ после указанной позиции.
11. Написать функцию, определяющую вхождение данного элемента в строку.
12. Определить сколько раз GOTO встречается в строке. Оформить в виде процедуры или функции.
13. Строка символов состоит из латинских букв. Расположить их по алфавиту. Оформить в виде процедуры или функции.
14. Найти в строке все слова-палиндромы. Оформить в виде процедуры или функции.
15. Определить есть ли в строке одинаковые слова. Оформить в виде процедуры или функции.
16. Удалить из строки все четные слова. Оформить в виде процедуры.
17. Дана строка символов. Удалить из строки все нецифровые символы. Оформить в виде процедуры или функции.
18. Дана строка символов. Определить, сколько различных символов в строке.