Typ string

Organizácia
Vieme, že do string premennej možno zapisovať texty rôznej dĺžky, aby systém vedel aký dlhý text sme vlastne zadali, je prvý bajt rezervovaný na zápis dĺžky vloženého textu. Pri práci s celým textom sa o tento údaj nastavuje automaticky. Napr.
readln(s); ak zadáme text Som doma. nastaví dĺžku na 9 a do ďalších bajtov zapíše zadaný text
V pamäti potom bude
0123456789
#9S om  d om a.

Stringové konštanty/hodnoty
Hocijaká postupnosť znakov medzi dvoma apostrofmi, napr. 'Janosik bol hrdina'
ak chceme do textu vložiť nejaké špeciálne znaky (napr. Enter = #13#10) píšeme textovú hodnotu nasledovne:
'Janosik bol hrdina'#13#10'v davnych dobach'
príkaz writeln('Janosik bol hrdina'#13#10'v davnych dobach'); vypíše:
Janosik bol hrdina
v davnych dobach

Ak chceme do textu vložiť apostrof dosiahneme to napísaním vnútri textu dvoma apostrofmi za sebou napr.
'My name''s is Georg' príkaz writeln('My name''s is Georg'); vypíše toto:
My name's is Georg
Deklarácia
Použitie celého textu
Ak chceme pracovať s celým textom použijeme názov identifikátora takejto premennej. Takúto premennú možno použiť:
Použitie-prístup ku jednotlivým písmenám/znakom textu
Nech v s je zapísaný text Som doma.
Ku písmenám textu sa môžme dostať pomocou indexov, s[1] je znaková premenná a má hodnotu 'S', s[9] má hodnotu '.' s[20] má náhodnú hodnotu - lebo je za našim textom.
Zadaním príkladov:
s[5]:='m'; s[6]:='a'; s[20]:='K';
sa hodnota našej premennej s zmení na hodnotu:
'Som mama.'
Zmena položky 20 nemá na hodnotu premennej s vplyv.
premenné s[i] možno používať všade kde možno použiť znakovú premennú.
Tvorba textových výrazov - textové operátory
V pascale je iba jeden textový operátor + , ktorý používame na spojenie dvoch textov do jedného
presnejšie na spojenie dvoch textov alebo jedného textu a jedného znaku
s1:='Dobre'; {dlzka textu 5 znakov}
s2:='Rano'; {dlzka textu 4 znaky}
s3:=s1+' '+s2; {dlyka textu: 5+1+4= 10 znakov}
Práca so znakmi

Výpis čísla v dvojkovej sústave

var
  s:string;
  znak:char;
  cislo, cislica: integer;
Begin
  s:=''; {prazdny retazec} 
  cislo:=100; 
  repeat
    cislica:= cislo mod 2;
	cislo:= cislo div 2;
	znak:=char(cislica+48); {zmena cisla na znak}
	s:=znak+s; { zvacsi text tak, ze zľava doplni dalsie pismeno}
  until cislo=0;	
  writeln(s);
  readln;       {program zastane}  
End.  
  

Podprogramy pre prácu s reťazcami
Pascal poskytuje základné nástroje pre prácu s reťazcami

Zmena vsetkých písmen textu na velké

var
  s:string;
  znak:char;
 
Begin
  write('Zadaj text:'); readln(s);          {vstup textu}
  for i:=1 to Length(s) do
  Begin
    znak:= UpCase(s[i]);    {Vyberieme pismeno a zmenime na velke} 
	s[i]:= znak;            {Zmenene dame naspat}  
  End;	
  writeln(s);
  readln;       {program zastane}  
End.  
  

Zistenie poctu vyskytov podretazca

var
  s,s1:string;
  znak:char;
  j,n:integer; 
Begin
  s:='Janosik bol rano na hranole';
  s1:='ano';
  Writeln('Hladam: ',s1,' v texte: ',s);
  repeat
     j:=Pos(s1,s);
	 if j>0 then 
	 Begin
	   delete(s,j,length(s1));
	   n:=n+1;
	 End;  
  until j=0;
  writeln('Pocet:',n);
  readln;       {program zastane}  
End.  
  

Prevod textu na číslo a naopak val(), str()
Keď máme v texte zapísané desiatkové číslo (celé alebo desatinné) môžme ho "premeniť" na číslo aby sme s ním mohli robiť aritmetické operácie.
Procedure val(text,kam,err)
text - text, kde by malo byť to číslo zapísané. Okrem čísla v texte nesmie byť nič iné. Číslo môže začínať znamienkom
kam - číselná premenná. Ak zapísané číslo je desatinné (obsahuje bodku alebo znak e), táto prem. musí byť reálna
err - celočíselná premenná. Ak err=0 prevod sa podaril, ak <>0 prevod sa nepodaril
Príklady (nech x je premenná typu real/double a n, err sú premenná typu integer) Prevod čísla na text je jednoduchší - skoro vždy sa podari :-)
procedure str(ciselny_vyraz, text)
kde výraz môže byť celočíselný alebo desatinný
  text je stringová premenná do ktorej sa zapíše výsledok
na číselný výraz možno použiť formátovače  : ako ich poznáme z príkazu write.
Príklady (nech s je premenná typu string)
Otázky