- •Рабочая программа
- •Тематический план учебной дисциплины
- •Основные теоретические положения
- •Тема 2.5 Массивы
- •Одномерный массив
- •Способы описания одномерного массива
- •Ввод элементов массива
- •Двумерные массивы
- •Способы описания двумерного массива
- •Ввод элементов массива
- •Вывод элементов массива
- •Тема 2.6 Подпрограммы: процедуры и функции
- •Тема 2.7 Строки символов
- •Способы описания строк
- •Тема 2.8 Множество
- •Операции над множествами
- •Тема 2.9 Записи
- •Описание фиксированной записи
- •Описание вариантной записи
- •Тема 2.10 Файлы данных
- •Описание файловых переменных
- •Стандартные процедуры и функции для работы с файлами
- •Тема 2.11 Динамические структуры данных
- •Указательная переменная может находиться в трех состояниях:
- •Действия с указателями
- •Стандартные процедуры для работы с динамической памятью
- •Создание прямого односвязного списка
- •Методические указания по методике отладки программ в интегрированной среде PascalAbc Изучение интегрированной среды Pascal abc
- •Перечень рекомендуемых учебных изданий, интернет-ресурсов, дополнительной литературы
Тема 2.7 Строки символов
Строка – это последовательность символов кодовой таблицы ASCII, заключенная в апострофы (одинарные кавычки), длинной от 0 до 255 символов.
Тип STRING (строка символов) в языке Pascal широко используется для обработки текстовой информации. Он во многом похож на одномерный массив символов. Массив символов имеет фиксированную длину(количество элементов), которая определяется при описании (Var C:array [0..N] of char).
Способы описания строк
1
Var имя перем : string[n];
.
2
Type имя типа= string[n];
Var имя перем : имя типа;
.
где n- максимальное количество символов в строке (по умолчанию n =255). Может быть любой константой порядкового типа.
Ввод строк осуществляется процедурой Readln. За одну процедуру можно ввести только одну строку. К символу строки можно обратиться как к элементу одномерного массива. Любой символ занимает в оперативной памяти 1 байт. Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки.
Например:
Var st : string[11]; x:byte;
Begin
Readln(st); {ввод строки st=’молоко’}
if st[ 5 ]=’A’ then . . .
x:= ord(st[0]); {x – текущая длина строки}
...
End.
-
6
м
о
л
о
к
о
i = 0 1 2 3 4 5 6 7 8 9 10 11 (номер байта)
Операции над строками
Объединение строк (конкатененация) +
Например:
Var s,s1,s2: string;
S1:=’ком’;
S2:=’пот’;
S:=S1 + S2; {s=‘компот’}
Сравнение строк (>, <, <=, >=, = < >)
Выполняется посимвольное сравнение строк по кодам таблицы ASCII. Символ с большим кодом дает большее значение всей величине (строке). Перед сравнением автоматически выравниваются длины сравниваемых строк. К более короткой строке справа добавляется недостающее количество пробелов.
Например:
‘Солома ‘ < ‘Соль ’
т.к. буква о в машинном алфавите стоит до буквы ь, а значит ее код меньше.
Стандартные процедуры и функции для работы со строками
-
Имя и параметры
Типы
параметров
Тип
результата
Действие
Функции
Length(s)
string
integer
определяет длину строки s
Copy(s,i,n)
s - string,
i,n - integer
string
Выделяет из строки s подстроку начиная с позиции i длиной n символов
Pos(s1,s)
s1, s - string
integer
возвращает позицию первого вхождения подстроки s1 в строку s (или 0 если подстрока s1 не найдена)
Concat(s1,...,
sn)
s1,..., sn - string
string
Объединяет строки s1,..., sn в одну строку
IntToStr(i)
i - integer
string
преобразует целое число i в строку символов
StrToInt(s)
s - string
integer
преобразует строку s в целое число
FloatToStr(r)
r - real
string
преобразует вещественное число r в строку символов
StrToFloat(s)
s - string
real
преобразует строку s в вещественное число
UpCase(c)
c - char
char
возвращает символ c, преобразованный к верхнему регистру
LowCase(c)
c - char
char
возвращает символ c, преобразованный к нижнему регистру
UpperCase(s)
s - string
string
возвращает строку s, преобразованную к верхнему регистру
LowerCase(s)
s - string
string
возвращает строку s, преобразованную к нижнему регистру
Trim(s)
s - string
string
возвращает копию строки s с удаленными лидирующими и заключительными пробелами
TrimLeft(s)
s - string
string
возвращает копию строки s с удаленными лидирующими пробелами
TrimRight(s)
s - string
string
возвращает копию строки s с удаленными заключительными пробелами
Процедуры
Delete(s,i,n)
s - string,
i, n - integer
удаляет в строке s n символов начиная с позиции i
Insert(s1,s,i)
s, s1 - string,
i - integer
вставляет подстроку s1 в строку s с позиции i
SetLength(s,n)
s - string,
n - integer
устанавливает длину строки s равной n
Str(x,s) Str(x:n,s) Str(x:n:m,s)
s - string,
x - integer, real n, m - integer
преобразует число x в строку s (во втором и третьем случаях согласно формату вывода, устанавливаемому n и m)
Val(s,x,c)
s - string,
v - integer, real
c - integer
преобразует строку s к числовому представлению x. Если преобразование возможно, то c= 0, иначе c- ненулевое значение
Пример1: :Дана непустая последовательность слов. Слова разделены пробелом, в конце строки -точка. Вывести слова предложения и определить, являются ли они палиндромами. Палиндром- это слово, которое читается справа налево и слева направо одинаково (шалаш) .
1способ решения задачи:
|
Program stroki1; var st,sl:string; k:integer; {функция определения палиндрома} FunctionPolindr(slo:string):boolean; var j:integer; slo2:string; begin slo2:=''; polindr:=true; for j:=length(slo) downto 1 do slo2:=slo2+slo[j]; {slo2-слово наоборот} if slo2<>slo then polindr:=false; end;
{операторы основной программы} begin writeln('Введите строку'); readln(st); st[length(st)]:= ' '; {замена точки пробелом }
while st<>’’ do begin k:=pos(' ',st) ; {поиск пробела} sl:=copy(st,1,k-1);{формирование слова}
if polindr(sl) then writeln(sl, ' – палиндром') else writeln(sl, ' – не палиндром');
delete(st,1,k); {удаление слова с пробелом} end end.
Результат решения задачи
Ребята построили шалаш. Ребята - не палиндром построили - не палиндром шалаш - палиндром |
При первом способе решения задачи последовательно удаляются слова, которые уже обработаны, пока исходная строка не станет пустой.
2 способ решения задачи:
Исходная строка не меняется. Посимвольно проверяется строка, пока не дойдем до разделителя между словами (точки или пробела). На этот момент в переменной Sl будет сформировано слово и передано в процедуру для обработки.
|
program stroki2;
var st,sl:string; {глобальные данные} i:integer;
{процедура определения палиндрома} procedure Polindr(slo:string); var j:integer; slo2:string; begin slo2:=''; for j:=length(slo) downto 1 do slo2:=slo2+slo[j]; {slo2-слово наоборот} if slo2<>slo then writeln('- не палиндром') else writeln('- палиндром ') end;
{операторы основной программы} begin writeln('Введите строку'); readln(st); for i:=1 to length(st) do if (st[i]=' ') or (st[i]='.') then begin writeln(sl); polindr(sl); {вызов процедуры} sl:=''; end else sl:=sl+st[i]; {посимвольное формирование слова} end.
Результат решения задачи
Введите строку казак чистил наган. казак- палиндром чистил- не палиндром наган- палиндром |
