Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
заоч_метод_2 сем.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.41 Mб
Скачать

Тема 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 (номер байта)

Операции над строками

  1. Объединение строк (конкатененация)  +

Например:

Var s,s1,s2: string;

S1:=’ком’;

S2:=’пот’;

S:=S1 + S2; {s=‘компот’}

  1. Сравнение строк (>, <, <=, >=, = < >)

Выполняется посимвольное сравнение строк по кодам таблицы 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.

Результат решения задачи

Введите строку

казак чистил наган.

казак- палиндром

чистил- не палиндром

наган- палиндром