Строковый тип данных
Строковый тип данных = string [[целое без знака]]. |
Строковый тип данных языка Паскаль позволяет в программе задавать структуру данных, которая называется строкой (стрингом). Строка очень похожа на линейный массив, состоящий из символов, но в отличие от линейного массива, в среде TP v.7.0, программист может не указывать длину строки.
var S:String;
begin
S:=’флейта’;
Write(S); => флейта
end.
Для работы со строками в модуле System Turbo Pascal есть следующие подпрограммы:
Подпрограммы для работы со строками
Сoncat(s1,s2,...sn):string
возвращает строку, полученную конкатенацией строк s1,s2,…sn
Pos(Pattern,Sourse:String):Integer
возвращает номер символа, начиная с которого Pattern входит в Sourse. Если вхождения нет, функция возвращает 0.
Pos('23','12345') => 2
Pos('54','45678') => 0
Pos('23','23 12345') => 1
Length(S:String):Integer;
возвращает длину строки S.
Length(‘мама’) => 4
Copy(S:String; Pos,Len:Integer):String;
возвращает строку, полученную из Len символов строки S, начиная с позиции Pos. Если Pos больше, чем длина строки S, то возвращается пустая строка. Если значение Len+Pos больше, чем длина строки S, то возвращаются символы, принадлежащие строке S.
Copy('window',1,3) => 'win'
Copy('window',7,1) => ''
Copy('window',6,4) => 'w'
Delete(var S:String; Pos,Len:Integer);
убирает из строки S Len символов, начиная с Pos. Если Len больше длины S, то ничего не происходит. Если значение Pos+Len больше длины строки, то удаляются все символы до конца строки.
Delete('bravo',2,2) => 'bvo'
Delete('bravo',10,1)=>'bravo'
Delete('bravo',5,4)=>'brav'
Insert(S:String;var D:String;Pos:Integer);
вставляет строку S в строку D перед символом с номером Pos. Если Pos больше длины D, то S и D соединяются. Если длина результата при этом больше длины D, то в D записываются самые левые символы. A:='bravo'
Insert('DD',A,3) => 'brddavo'
Insert('KK',A,10) => 'bravokk'
Insert('AL',A,1) => 'albravo'
Str(I:Integer;var S:String); Str(R:Real;var S:String);
преобразует S или R из числа в строку S. I и R могут быть записаны с использованием формата.
var S:String[4]; K:Real;
begin
k:=45.678;
Str(45,S); Write(S) => '45'
Str(k:9,S); Write(S) => '4.568E+02'
Str(45:3,S); Write(S) => '_45'
Str(K:8,S); Write(S) => '4.47E+02'
Str(45:5,S); Write(S) => '___4'
end
Val(S:String; var R:Real; var P:Integer);
Val(S:String; var I,P:Integer);
преобразует строковую переменную S в число. Если в строке S ошибок нет, то P=0; иначе P присваивается номер ошибочного символа.
Пример 1
{Программа в предложении Stroka
все сочетания X меняет на Y}
var Stroka, X,Y:String;
N:Integer;
begin
Write('Введи предложение =Ю ');
Readln(Stroka);
Write('Что заменим? ');
Readln(X);
Write('Чем заменим? ');
Readln(Y);
N:=Pos(X,Stroka);
while N>0 do
begin
Delete(Stroka,N,Length(X));
Insert(Y,Stroka,N);
N:=Pos(X,Stroka);
end;
Writeln;
Write('Получили -');
Writeln(Stroka);
end.
Пример 2
{Программа в предложении Stroka
все слова выводит наоборот}
var Stroka, Slovo:String;
I:Integer;
begin
Write('введи предложение=> ');
Readln(Stroka);
for i:=1 to length(Stroka) do
if Stroka[i]=' ' then
begin
Write(Slovo);
Write(' ');
Slovo:='';
end
else
Slovo:=Stroka[i]+Slovo;
Write(Slovo);
end.
Пример 3
{Программа выясняет, является ли строка B перестановкой символов строки A}
var StrokaA,StrokaB:String; N,i:Integer; Priznak:Boolean;
begin
Write('Введи строку A=> '); Readln(StrokaA);
Write('Введи строку B=> '); Readln(StrokaB);
if Length(StrokaA)=Length(StrokaB)
then Priznak:=True else Priznak:=False;
if Priznak then
begin
i:=1;
while (i<=Length(StrokaA)) and Priznak do
begin
N:=Pos(StrokaA[i],StrokaB);
if N>0 then Delete(StrokaB,N,1)
else Priznak:=False;
i:=i+1;
end;
end;
Writeln; Write('Символы строки А - ');
if Priznak then Writeln(' перестановка')
else Writeln('не перестановка');
Writeln('символов строки B');
end.
Пример 4
{Программа выясняет, является ли последовательность цифр
номером счастливого билета}
uses Crt;
var i, SumLeft,SumRight,Left,Right,P1:Integer; Word:String; B:Char;
begin
repeat
i:=1; Word:=''; Writeln;
Write('введи номер билета =>');
repeat
repeat
B:=ReadKey;
until ((B>='0')and(B<='9')) or (Ord(B)=13);
if Ord(B)<>13 then
begin
Word:=Word+B; Write(Word[i]);
end;
i:=i+1;
until Ord(B)=13;
until not(Odd(Length(Word)));
SumLeft:=0; SumRight:=0;
i:=1;
while i<=Length(Word) div 2 do
begin
Val(Word[i],Left,P1);
Val(Word[Length(Word)-i+1],Right,P1);
SumLeft:=SumLeft+Left;
SumRight:=SumRight+Right;
i:=i+1;
end;
Writeln;
if (SumLeft=SumRight) and (SumLeft<>0)
then Write('это СЧАСТЛИВЫЙ БИЛЕТ!')
else Writeln(' нет в жизни счастья!');
end.
