СТРОКИ Строковой называется последовательность символов определённой длины. Идентификатор типа – слово String Примеры описания: Var Str1 : String[10]; Str2 : String; Str3 : String[45]; В квадратных скобках указывается максимальный размер (длина) строки. Если он не указан, то длина строки счис\тается равной 255 символам. Строку можно рассматривать как одномерный массив из символов. К каждому символу строки допустимо обращение по его номеру:Str1[i] – обращение к i-му элементу строки Str1 Первый символ строки (с индексом 0) содержит фактическую длину строки. Переменные типа вводятся и выводятся на экран монитора не поэлементно, как массивы, а сразу целиком.
Стандартные процедуры и функции работы со строковым типом данных ТипВызовПараметрыДействие Процедура Delete(s,p,n) Var s:String; p,n:Integer; Удаляются n символов из строки s, начиная с позиции p Процедура Insert(w,s,p) Var w,s:String; p:Integer; В строку s, начиная с позиции p, вставляется строка w. Если результат превысит 255 символов, строка обрывается Процедура Str(v,s) Var v: Integer (или v:Real); s:String; Число v преобразуется в строку, результат в s. Процедура Val(s,v,w) Var s:String; w,v:Integer (или v:Real); Если строка s состоит из цифр, то они преобразуются в числовое значение переменной v, значение w равно 0.
ТипВызовПараметрыДействие Функция Concat(s1,s2, …, sm ) или s1+s2+…+sm Значение функции типа String Var s1, s2, …, sm : String; Строки s1+s2+…+sm записываются одна за другой. Если результат превысит 255 символов, строка обрывается Функция Copy(s,p,n) Значение функции типа String Var s : String; p, n: Integer; Из строки s, начиная с позиции p, выбирается n символов. ФункцияLength(s) Значение функции типа Integer Var s : String; Определяется длина строки s, т.е. Число символов, из которых она состоит Функция Pos(w,s) Значение функции типа Integer Var w, s : String; В строке s отыскивается первое вхождение строки w (номер позиции). Если вхождения нет, то выдаётся 0.
Примеры 1)s1:=Я помню чудное мгновенье; writeLn(s1); Э К Р А Н: Delete(s1,9,7); writeLn(s1); Я помню чудное мгновенье Я помню мгновенье 2) s1:=Я помню чудное мгновенье; writeLn(s1); Я помню чудное мгновенье s2:=очень ; Insert(s2,s1,9); writeLn(s1); Я помню очень чудное мгновенье 3) l:=567; m:=97.3; writeLn(l) writeLn(m:5:1); Str(l,s1); writeLn(s1); Str(m,s2);writeLn(s2); WriteLn(s1+s2); строки
4) s1:=789; s2:=34.6; s3:=3+2a; Э К Р А Н: Val(s1,p,w); writeLn(p:4,w:2); Val(s2,q,w); writeLn(q:6:1,w:2); WriteLn(p+q:7:1); Val(s3,p,w); writeLn(w); ) s1:=Я помню чудное мгновенье; WriteLn(s1); p:=Pos(о,s1); WriteLn(p); q:=Length(s1); WriteLn(q); Я помню чудное мгновенье 24 4 p:=Pos(к,s1); WriteLn(p); 0
Задачи. 1) Дана строка символов. Подсчитать, сколько раз среди символов строки встречается символ + и сколько раз символ *. да k:=k+1 k S,q K:=0 S[i]=q нет Procedure ks(s:string;q:char; var k:byte); var i:byte; Begin k:=0; For i:=1 To Length(s) Do If s[i]=q Then inc(k); End; i, 1, length(s)
2) Дана строка символов. а) Заменить все восклицательные знаки в этой строке точками. б) Заменить каждую точку в строке многоточием. в) Заменить каждую из групп стоящих рядом точек одной точкой. Procedure Zam(w,v:String; Var st:String); { w–старый символ, v-новый символ} Var k:byte; Begin … While Pos(w,st)0 Do begin k:=Pos(w,st); Delete(st,k,Length(w)); Insert(v,st,k); end; End; w,v,st Insert(v,st,k); st Pos(w,st)0 да k:=Pos(w,st); Delete(st,k,Length(w)); нет a)
3) Задана строка символов. Определить все позиции вхождения заданного символа в строку, используя процедуру Pos (известно, что функция Pos возвращает позицию только первого вхождения подстроки в строку) Const z:String=*?** * ? ?** ; ch : Char=?; i: Byte=0; BEGIN WriteLn(z); While Pos (ch,z)0 do begin WriteLn(Pos(ch,z)+i) Delete(z, Pos(ch,z),1); Inc(i) end; WriteLn(z); ReadLn; END. ЭКРАН: *?** * ? ?** *** * **
4) Задана строка. Исключить из неё группы символов, а)расположенные между фигурными скобками; б)сами скобки тоже исключить. а) Uses crt; Const s:String=текст{bvbv}буквы{b} Var l,r:Byte; BEGIN ClrScr; WriteLn(s); While Pos({,s)0 do begin l:=Pos({,s); r:= Pos(},s); Delete(s,l+1,r-l); end; WriteLn(Преобразованная строка:); WriteLn(s); END.
Обработкастрокпо словам Обработка строк по словам Словом называют набор символов, ограниченный с обеих сторон пробелом Задача 1 Дана строка, слова в которой разделены пробелом. Выделить из данной строки слова минимальной и максимальной длины и проверить, содержат ли они сдвоенные нн PROCEDURE WORDS(St:String;P:Integer; VAR SS:String); Var i:Integer; BEGINSS:=;i:=P; While i
PROGRAM z1; VAR s:string; sl,min,max:string;k,nmin,nmax:byte; PROCEDURE Words (St:string;P:byte;VAR ss:string); Var i:byte; Begin ss:=''; i:=P; WHILE i
While knmax Then Begin nmax:=Length(sl); max:=sl; End; If Length(sl)
ФУНКЦИЯ UPCASE( c ) Параметром функции является символьная величина (char). Если параметр функции является малой буквой латинского алфавита, то результатом функции будет соответствующая большая буква (буква верхнего регистра). Если параметр не является малой буквой латинского алфавита, то функция возвращает значение параметра без изменения. Пример: WriteLn(z); x:=upcase(z); WriteLn(x); ЭКРАН: z Z
Задача 2. Дана строка s. а) Подсчитать количество слов в данной последовательности. Program n_a; uses crt; Var c:char; k: byte; BEGIN clrscr; k:=0; Write(Введите текст:'); read(c); Repeat While(c=' ') and Not eoln Do Read(c); inc(k); While(c' ') and Not eoln Do Read(c); Until eoln; WriteLn('k= ',k:3); END. нет c конец строки начало k:=0 c C= и не конец строки да c k конец C= и не конец строки да k:=k+1
б) Подсчитать количество букв а в последнем слове данной последовательности Program n_b; uses crt; Var c:char; st:string[50]; i,k,n: byte; BEGIN clrscr; k:=0; Write('Vvedite tekst:'); read(c); Repeat While(c =' ') and (c#13) Do Read(c); st:=''; While (c' ') and (c#13) Do Begin st:=st+c; Read(c);End; WriteLn('st=',st); Until c=#13; n:=ord(st[0]); FOR i:=1 To n Do If st[i]='a' Then inc(k); WriteLn('k= ',k:3); readLn END.
в) Подсчитать количество слов, начинающихся с буквы б. Program n_v; uses crt; Var c:char; st:string[50]; k: byte; BEGIN clrscr; k:=0; Write('Vvedite tekst:'); read(c); Repeat While(c=' ') and (c#13) Do Read(c); st:=''; While(c' ') and (c#13) Do Begin st:=st+c; Read(c);End; WriteLn('st=',st); If st[1]='b' Then inc(k); Until c=#13; WriteLn('k= ',k:3); readLn END.
Program n_g; uses crt; Var c:char; st:string[50]; k: byte; BEGIN clrscr; k:=255; Write('Vvedite tekst:'); read(c); Repeat While(c=' ') and (c#13 Do Read(c); st:=''; While(c' ') and (c#13 Do Begin st:=st+c; Read(c); End; WriteLn('st=',st); If ord(st[0])