Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
m08_lection1.DOC
Скачиваний:
0
Добавлен:
07.07.2019
Размер:
74.75 Кб
Скачать

Строковый тип данных

Строковый тип данных = string [[целое без знака]].

Строковый тип данных языка Паскаль позволяет в программе задавать структуру данных, которая называется строкой (стрингом). Строка очень похожа на линейный массив, состоящий из символов, но в отличие от линейного массива, в среде TP v.7.0, программист может не указывать длину строки.

var S:String;

begin

S:=’флейта’;

Write(S); => флейта

end.

Для работы со строками в модуле System Turbo Pascal есть следующие подпрограммы:

Подпрограммы для работы со строками

  1. Сoncat(s1,s2,...sn):string

возвращает строку, полученную конкатенацией строк s1,s2,…sn

  1. Pos(Pattern,Sourse:String):Integer

возвращает номер символа, начиная с которого Pattern входит в Sourse. Если вхождения нет, функция возвращает 0.

Pos('23','12345') => 2

Pos('54','45678') => 0

Pos('23','23 12345') => 1

  1. Length(S:String):Integer;

возвращает длину строки S.

Length(‘мама’) => 4

  1. 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'

  1. 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'

  1. 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'

  1. 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

  1. 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]