Операции, определенные над строковыми переменными

1. Операции присваивания.

s:=’Turbo Pascal’;

s1:=s; если длина s>s1, то лишние символы будут отброшены

str:=’x’;

2. Операции сравнения (отношения) =, <>, >, <, <=, >=.

Правила сравнения строк:

1)Сравнение строк производится посимвольно в соответствии с их кодами слева направо до первого несовпадающего символа. Строка считается больше, если в ней первый несовпадающий символ имеет больший номер в таблице кодов.

Например, ‘MS-DOS’<’MS-Dos’.

2)Если строки имеют различную длину, но в общей части символы совпадают, то более короткая строка меньше.

Например, ‘Компьютер’<’Компьютер ’.

3)Строки равны, если они полностью совпадают, т.е. совпадают длины и содержание.

Например, ‘Маска’ = ’Маска’.

3. Сложение (конкатенация) строк.

Операция сцепления (+) применяется для соединения нескольких строк в одну строку. Сцеплять можно и константы, и переменные. Длина результирующей строки не должна превышать 255 символов.

4. Операции ввода-вывода.

Строки можно вводить и выводить как одномерный массив в цикле.

Пример ввода:

Writeln(‘input n’);

Readln(n);

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.

Пример

Значение St Выражение Результат
‘абвгде’ Delete(St, 4, 2); ‘абве’
‘река Волга’ Delete(St, 1, 5); ‘Волга’

2) Процедура Insert (S1 :string; var S2 :string; Poz:byte) – вставка строки S1 в строку S2, начиная с позиции Poz.

Пример

Значение S1 Значение S2 Оператор Результат
‘ ЕС ’ ‘ЭВМ1841’ Insert (S1, S2, 4); ‘ЭВМ ЕС 1841’
‘ N’ ‘ Рис. 2’ Insert (S1, S2, 6); ‘ Рис. N2’

3) Процедура Str(N:{integer/real}; var St:string) – преобразование числового значения N в строковый и помещение результата в строку St.

Пример

Значение N Выражение Результат
  Str (N:6,St); ‘ 1500’

4) Процедура Val(St:string; var N:{integer/real}; var Code:byte) – преобразует значение St в величину целочисленного или вещественного типа и помещает результат в N. Code – целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Code равно 0, если же обнаружена ошибка, то Code будет содержать номер позиции первого ошибочного символа, а значение N не определено.

Пример

Значение St Выражение Результат
‘1500’ Val(St, N,Code); Code=0
’14.2A+02 Val(St, N,Code); Code=5

5) Функция Copy(S:string; Poz, N:byte):string; – выделяет из строки S подстроку длиной N символов, начиная с позиции Poz.

Пример

Значение S Выражение Результат
‘Мама мыла раму’ Copy(S, 6, 4); ‘мыла’

6) Функция Concat(S1,S2,…,Sn:string):string; – выполняет сцепление строк S1,S2,…,Sn в одну строку.

Пример

Выражение Результат
Concat(‘Мама ’,’мыла ’,’раму’) ‘Мама мыла раму’

7) Функция Length(S:string):byte; – определяет текущую длину строки S.

Пример

Значение S Выражение Результат
‘1500 символов’ Length(S)  

8) Функция Pos(S1,S2:string):byte;– определяет первое появление в строке S2 подстроки S1.

Пример

Значение S2 Выражение Результат
‘abcdef’ Pos(‘cd’,S2)  
‘abcdef’ Pos(‘k’,S2)  

Замечание: В PascalABC добавлены следующие процедуры и функции:

  1. SetLength(var s:string; n:byte); - устанавливает в строке s длину, равную n.
  2. IntToStr(i:integer):string; - преобразует целое число в строку.
  3. StrToInt(s:string):integer; - преобразует строку в целое число. Если преобразование невозможно, то возникает ошибка времени выполнения.
  4. FloatToStr(x:real):string; - преобразует вещественное число в строку.
  5. StrToFloat(s:string):real; - преобразует строку в вещественное число. Если преобразование невозможно, то возникает ошибка времени выполнения.
  6. UpperCase(s:string):string; - возвращает строку s, преобразованную к верхнему регистру.
  7. LowerCase(s:string):string; - возвращает строку s, преобразованную к нижнему регистру.
  8. Trim(s:string):string; - возвращает копию строки s с удаленными лидирующими и заключительными пробелами.
  9. TrimLeft(s:string):string; - возвращает копию строки s с удаленными лидирующими пробелами.
  10. TrimRight(s:string):string; - возвращает копию строки s с удаленными заключительными пробелами.

Пример. Из данной символьной строки выбрать все цифры и сформировать другую строку из этих цифр, сохранив их последовательность.

Program Stroki;

Var S1, S2:string;

Begin

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

Readln(S1);

S2:= ‘ ‘;

For i:=1 to length(S1) do

If (S1[i]>=’0’) and (S1[i]<=’9’)

Then S2:=S2+S1[i];

Writeln(‘Результат’, S2)

End.

Пример. Дана строка символов, удалить все лишние пробелы.

1) Работа со строкой как с одномерным массивом (в этом случае текущая длина строки динамически не меняется):

Var st:string;

i,j:byte;

begin writeln(‘input st’);

readln(st);

j:=1;

for i:=2 to length(st) do

if (st[i]<>st[j]) or (st[j]<>’ ‘) then

begin j:=j+1;

st[j]:=st[i];

end;

for i:=1 to j do write(st[i]); writeln;

end.

2) Работа со строкой как с единым объектом массивом (в этом случае текущая длина строки динамически меняется):

Var st:string;

Begin writeln(‘input st’);

readln(st);

while pos(‘ ‘,st)>0 do delete(st,pos(‘ ‘,st),1);

writeln(st);

end.

Как преобразовать эту программу, чтобы не было пробелов в начале и в конце строки?

Var st:string;

Begin writeln(‘input st’);

readln(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);

writeln(st);

end.

В PascalABC эта задача упрощается:

Var st:string;

Begin writeln(‘input st’);

readln(st);

while pos(‘ ‘,st)>0 do delete(st,pos(‘ ‘,st),1);

writeln(Trim(st));

end.

Замечание: Если это решение задачи оформить в виде процедуры, то любую строку можно привести к правильному виду, т.е. к строке, у которой все слова разделены одним пробелом и нет лишних пробелов в начале и в конце строки. Это позволит решение большинства задач на строки привести к одному алгоритму:

Var s,s1:string;

Begin writeln(‘input s’);

Readln(s);

S:=s+’ ‘;

While pos(‘ ‘,s)>0 do

Begin s1:=copy(s,1,pos(‘ ‘,s)-1); {выделяем слово}

{обрабатываем слово в соответствии с условием задачи}

Delete(s,1,pos(‘ ‘,s)); {удаляем обработанное слово}

{в цикле переходим к обработке следующего слова}

End;

{вывод результата}

End.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: