150 likes | 276 Views
Рад са нискама карактера (стринговима) у Паскалу. Тип string у Турбо Паскалу. Тип string. PASCAL располаже типом string за рад са низом карактера (стандaрdnог типa Char). На пример, стрингови oд 20 карактера су низови дефинисани: packed array [1..20] of Char
E N D
Рад са нискама карактера (стринговима) у Паскалу Тип string у Турбо Паскалу
Тип string • PASCAL располаже типом string за рад са низом карактера (стандaрdnог типa Char). На пример, стрингови oд 20 карактера су низови дефинисани: packed array [1..20] of Char • Стринговима се мора унапред дефинисати максимална дужина, док стварна дужина вредности стринг променљиве може варирати (до максималне) у току извршавања програма. • За дефинисање типа стринг користи се резервисана реч string, иза које се у квадратним заградама наводи максимална дужина стринга.
Дефиниција типа string и декларација string променљивих type kratkaLinija=string[80]; dugaLinija=string[255]; var lozinka:string[10]; prezime:string[30j; ime: kratkaLinija; s1,s2: dugaLinija; s3:string; {s3:dugaLinija;}
Додела вредности lozinka:='torta‘; lozinka:=''; {prazan string} lozinka:='"'; {string sa jednim karakterom “} Readln(lozinka); {karakteri stringa se ucitavaju sa standardnog ulaza}
Поређење стрингова • Исправна је додела вредности s2 := s1 где низовnа прoмenљiva s2 и израз s1 имају било кojи тип стрингa са истим бројем кoмпoнената. • Рeлaциoни оператори (= , <>, <, >, <=, >=) могу се упoтрeбити при упоређивању било кoја два стринга. • Уређеност је одређена рeдослeдом прeдeкларисаног типа Char (ASCII) и подразумевa да је први eлeмeнт (A[1]) најзначајнији у том поређењу • Над типом стринг је дефинисано поређење које даје резултате логичког типа. Резултат поређења зависи од поређења првог пара знакова који није у релацији једнако. • На пример, важи: 'ABCD'<'ABCE' ‘1111'<‘99' Знакови се пореде помоћу вредности својих кодова.
Декларисана дужина стринга Променљива типа Стринг може имати декларисану дужину (димензију) у виду ма ког позитивног целог вроја не већег од 255. Ако се вредност дужине стринга не наведе, подразумева се да је 255. Стринг променљива заузима у меморији један бајт више од дефинисане дужине. Нулти бајт (елемент стринга индексиран нулом) указује на дужину важећег дела стринга.
ОПЕРАЦИЈЕ НАД СТРИНГОВИМА • За манипулацију подацима типа стринг користи се низ уграђених функција и процедура. Funkcija length даје целобројну дужину текуће вредности променљиве с типа string. length(‘123’) даје вредност 3 • Вредности променљивих типа string исписују се помоћу наредби write или writeln. • Ако је дужина поља које одговара стринг вредности у наредби write већа од текуће дужине стринг променљиве, врши се поравнавање с десне стране поља, а с леве стране је допуњавање празнинама. Ако је дужина поља мања од дужине променљиве, поље се проширује колико је потребно за испис стринга. Пример. За вредност s:='PASCAL' добијају се следећа исписивања: writeln(s:6) исписује PASCAL writeln(s:8) исписује PASCAL writeln(s:5) ispisuje PASCAL
Надовезивање (конкатенација) стрингова • Funkcijom concat(sl,s2,s3,... sn)се формира нови стринг надовезивањем стрингова који су аргументи функције. На пример, • concat('ABC','XYZ') даје 'ABCXYZ' concat('12','34’,’56') даје '123456'. • Стрингови се могу надовезивати (стручни израз конкатенација) и применом знака ‘+’. На пример, s4:=s1+s2+s3 има исти ефекат каоs4:=concat(sl,s2,s3)
Налажење подстринга Funkcija pos(sl,s2)одређује позицију појављивања стринга s1 у стрингуs2. Између осталог, ова функција испитује да ли се стринг s1 садржи у стрингу s2. Ако је то тачно, pos даје цео број који означава позицију првог појављивања стринга s1идући слева надесно у стрингу s2. У противном даје 0. Према томе, вредност: pos('gram','programiranje') je 4 pos('VAR','VAR') je 1 pos('grad','beograd') je 4 pos(‘BAL','LAMBADA') je 0 pos('DA','LAMBADA') je 6
Копирање подстринга Funkcija copy(s, p, d)даје нови стринг формиран копирањем d знакова стринга s почев од позиције p. На пример, copy('LAMBADA',6,2) vraća 'DA' Ако желимо да испишемо последњих пет знакова променљиве email, treba napisati: writeln(copy(email,length(email)-4,5)). Ако желимо испис свих подстрiнгова променљиве email, укључујући и њу саму: for p:=1 to length(email)do for d:=1to length(email)-p+1do writeln(copy(email,p,d));
Пример 1 Написати програм којим се улазни стринг исписује са десет знакова у врсти, изузев последње врсте која може имати мање од 10 знакова, и садржи остатак стринга. program Prelom;var s:string[80];i:integer;begin readln(s); i:=1;while i<=length(s) dobegin write(copy(s,i,10)); writeln; i:=i+10endend.
Уклањање подстринга • Procedura delete(s, p, d)уклања подстринг стринга s почев од позиције p у дужини d. На пример, s:=’PROGRAM’; delete(s,3,3); writeln(s); Излаз: наредба writeln исписује: PRAM.
Пример 2 Написати програм којим се речи улазног стринга исписују у инверзном поретку. Речи су међусобно раздвојене празнинама. program InverzReci;var blanko:integer; staral,noval:string[100];begin writeln('Unesite string cije reci zelite da invertujete'); readln(staral); noval:=''; (* dva navodnika, a ne apostrof *) staral:=concat(staral,' '); {*dopisati prazninu*}while staral <>''dobegin blanko:=pos(' ',staral); noval:=copy(staral,1,blanko)+noval; delete(staral,1,blanko)end; writeln(noval)end. Како је претпостављено да се речи раздвајају празнином то се користи функција posза одређивање границе речи. Свака реч издвојена с почетка стринга staralдодаје се на почетак noval, што обезбеђује промену поретка речи старе линије. Када staralпостане празан стринг, исписује се стринг noval.
Уметање подстринга • Procedura insert(sl, s2, p)умеће стринг s1 у стринг s2 почев од позиције p. На пример, s1:=’OGR’; s2:=’PRAM’; insert(s1,s2,3); writeln(s2); Излаз: наредба writeln исписује: PROGRAM
Пример 3 Написати програм којим се у стрингу с замењује свако појављивање стринга s1 стрингом s2. program Zamene; var pozicija: integer; s,sl,s2:string; begin writeln(‘Unesi string:’); readln(s); wnteln(‘Zameniti string:’); readln(s1); writeln(‘Stringom:’); readln(s2); while pos(sl,s)<>0 do begin pozicija:=pos(sl,s); delete(s,pozicija,length(s1)); {*brise s1*} insert(s2,s,pozicija) {*umece s2 u s*} end; writeln(s) end.