Reťazce znakov


Znakový reťazec je údajový typ veľmi podobný poľu. Obsahuje ľubovoľnú postupnosť znakov zapísateľných z klávesnice. Maximálna dĺžka textového reťazca je 255 znakov.

Označuje sa kľúčovým slovom string. Nie je zavedený univerzálny typ reťazca, ktorý by zahŕňal reťazce ľubovoľných dĺžok, ale rozlišujú sa rôzne typy reťazcov podľa dĺžky. Vyššie sme uviedli, že reťazec je postupnosť znakov. Premenná tohto typu si môže zapamätať práve jeden znak, prípadne skupinu znakov maximálnej dĺžky, napr. písmeno (A, B, C,..., a, b, c,...), číslicu (0, 1, 2,...), ale aj iné znaky (@, %, €,... +, -, *, /,...), pričom hodnoty typu char zaberajú v počítači jeden bajt a kódované sú ASCII kódovaním. 

Operácie, ktoré môžeme so znakovými reťazcami vykonávať sú napríklad priradenie hodnotydo premennej, môžeme ju porovnať s inou hodnotou a znakovú hodnotu môžeme vypísať, napr. do grafickej plochy.

Základné funkcie so znakovými reťazcami:

  • vytvorenie reťazca
  • zisťovanie dĺžky reťazca
  • zreťazenie dvoch a viacerých reťazcov
  • práca s jednotlivými znakmi reťazca
  • Výpočet znakov v zadanom reťazci
  • kopírovanie reťazca

Znakové reťazce (string), rovnako ako typ char majú svoje konštanty, ktoré zapisujeme do apostrofov. S týmito konštantami sme sa už stretli napríklad pri príkaze na výpis textu TextOut (Image1.Canvas.TextOut /10, 10 'Ahoj'/), alebo pri nastavení textu na komponente Label (Label1.Caption := 'Ahoj')

V nasledujúcich príkladoch si ukážeme, ako môžeme takéto texty uchovávať v premenných, ako ich môžeme meniť a ako s nimi budeme pracovať. V prvom rade musíme mať zadeklarované premenné typu znakový reťazec (string), následne im priradíme nejakú hodnotu, napr. reťazcovú konštantu a nakoniec ju, nám už známym spôsobom, vypíšeme na grafickú plochu (obr. 83).

obr. 83 Práca s premennou typu String – vytvorenie reťazca
obr. 83 Práca s premennou typu String – vytvorenie reťazca


Keď už máme reťazec vytvorený, vieme pomocou funkcie Lenght zistiť jeho dĺžku, tá je však údajového typu Integer, teda celé číslo a musíme preň deklarovať novú premennú typu Integer (obr. 84). 


obr. 84 Funkcia Length – zisťovanie dĺžky reťazca
obr. 84 Funkcia Length – zisťovanie dĺžky reťazca


Po spustení programu (F9) dostávame (obr. 85):


obr. 85 Dĺžka reťazca ‘Vitajte!‘
obr. 85 Dĺžka reťazca ‘Vitajte!‘


Program nám oznámil, že dĺžka reťazca "Vitajte!" je 8  (tvorí ju 8 znakov). Program zmeníme tak, že nám nevypíše len číslo osem, ale odpovie nám celou vetou (obr. 87), t. j.: "Zistil som dĺžku reťazca. Jeho dĺžka je 8 (obr. 86).


obr. 87 Zreťazenie reťazcov a výpis na grafickú plochu
obr. 87 Zreťazenie reťazcov a výpis na grafickú plochu


Funkcia, ktorá nám umožní spájať dva a viac reťazcov do jedného celku sa nazýva zreťazenie a na zreťazenie slúži operácia plus (+). V tomto prípade má iný význam ako pri sčitavaní čísel.

Premenná typu string môže obsahovať aj prázdny reťazec (Reťazec := ' ';) vtedy je jej dĺžka 0.

So znakovými reťazcami môžeme pracovať aj po jednotlivých znakoch. Ak máme premennú znakový reťazec, môžeme pristupovať ku konkrétnemu znaku tak, že index, t. j. poradové číslo znaku, uzavrieme do hranatých zátvoriek (ALT+91 a ALT+93). Znaky v znakovom reťazci (string) sú očíslované od 1 pre prvý znak až po Length pre posledný znak.

Pracujme s našim vytvoreným reťazcom "Vitajte!", ktorý má dĺžku 8, ako sme už zistili v predchádzajúcom príklade, preto indexom môže byť číslo od 1 po 8. Napríklad:

R [4] má hodnotu ' a '

R [Length (R)] je posledný znak v reťazci, teda ' ! '

R [I] je I-ty znak, závislý od hodnoty celočíselnej premennej, ktorá musí byť z intervalu <1, 8>

Index môžeme zadať nielen celočíselnou konštantou, ale aj premennou alebo aj aritmetickým výrazom. Dôležité je, aby to malo hodnotu z intervalu <1, Length (R)>.

Prácu s jednotlivými znakmi reťazca si ukážeme v nasledujúcom príklade, v ktorom využijeme aj cyklus for a editovací riadok Edit1. Program bude vyberať postupne zo zadaného reťazca znaky, zakaždým nastaví náhodnú farbu písma a vypíše príslušný znak (obr. 88). 


obr. 88 Práca s jednotlivými znakmi reťazca
obr. 88 Práca s jednotlivými znakmi reťazca

  • Skôr, ako sme pracovali so znakmi reťazca, nastavili sme farbu a veľkosť písma, ktorá zostáva nemenná. Ak by sme tieto príkazy nezadali, program by menil farbu aj prvým dvom riadkom, čo nechceme.
  • Doteraz sme pracovali s apostrofmi len vtedy, ak sme ohraničovali nejaký text. V tomto príklade sme ale ohraničovali ďalšie apostrofy, čím sme vypisovaný text zapísali do úvodzoviek.
  • Použili sme ešte jeden nový príkaz a to je funkcia UpCase, ktorá spraví z malého písmena abecedy zodpovedajúce veľké písmeno. Ostatné znaky (napr. %, = !,...) zostávajú nemenné.
  • pozn. Editovaciemu riadku sme v Inšpektore objektov nastavili vlastnosť Text na nulovú hodnotu

Keď program spustíme, zadáme do editovacieho riadku text (napr. Vitajte!), s ktorým bude program pracovať a upravovať ho. Môže to vyzerať napríklad takto (obr. 89): 


obr. 89 Funkcia UpCase a úprava jednotlivých znakov reťazca
obr. 89 Funkcia UpCase a úprava jednotlivých znakov reťazca


Nasledujúci program počíta počet písmen, číslic a medzier v zadanom texte. V cykle for prechádzame postupne všetky znaky a pre každý zvlášť (R[I]) zisťujeme, či je to písmeno, číslica alebo medzera (obr. 90).


obr. 90 Počet písmen, číslic a medzier v zadanom reťazci
obr. 90 Počet písmen, číslic a medzier v zadanom reťazci


Po spustení programu a stlačení tlačidla Počítaj program vypíše výsledok (obr. 91):


obr. 91 Výpočet znakov v zadanom reťazci a výpis výsledku na grafickú plochu
obr. 91 Výpočet znakov v zadanom reťazci a výpis výsledku na grafickú plochu


Použili sme niekoľko nových príkazov, ktoré si teraz vysvetlíme:

  • V podmienenom príkaze sme zadávali logické operácie and a or. Okrem nich existuje aj operácia not:

not A negácia

 A and B logický súčin

A or B logický súčet

True, ak A = False

True, ak zároveň A = True aj B = True

True, ak aspoň pre jedno A = True alebo B = True


  • Ďalším novým príkazom bol Inc, pomocou ktorého vieme zvýšiť obsah ordinálnej (rozlišujúca medzi predchádzajúcim a nasledujúcim prvkom iba v zmysle "väčší - menší" ) premennej. Ďalšími funkciami sú napr:
  •                       Succ ('A') = 'B'
  •                       Succ ('f') = 'g
  •                       Pred ('3') = '2'
  •                       Pred ('Z') = 'Y'
  •                       Inc (I) rovnaké ako I := I +1;
  •                       Dec (Z) rovnaké ako Z := Pred (Z);

                  Inc (X, 18) rovnaké ako X := X +18;

  • nasledovník ordinálnej hodnoty
  • nasledovník ordinálnej hodnoty
  • predchodca ordinálnej hodnoty
  • predchodca ordinálnej hodnoty
  • zvyšovanie ord. hodnoty
  • znižovanie ord. hodnoty


Jednou z najdôležitejších funkcii pri práci s textovým reťazcom je Copy, ktorá vie z reťazca vybrať nejaký podreťazec. Znamená to, že z daného reťazca R nemusíme vyberať len jeden znak R[I] a s tým ďalej pracovať, ale môžeme z neho vybrať aj nejakú súvislú časť. Funkcia Copy má 3 parametre:

  1. je samotný reťazec, z ktorého chceme vyberať nejakú časť
  2. je index, na ktorom začína tento podreťazec
  3. je dĺžka tohto podreťazca

Copy ('Janosik', 3, 2) = 'no'

Často sa môžete stretnúť aj so zápisom

Copy (Retazec, I, MaxInt), 

ktorý označuje, že z daného reťazca Retazec berieme od I-teho znaku všetky až do konca.

Napríklad, ak chceme vyhodiť znak na I-tej pozícií, môžeme zapísať:

Copy (Retazec, 1, I - 1) + Copy (Retazec, I + 1, MaxInt)

Výsledný reťazec je teda spojenie dvoch reťazcov: znaky od začiatku až po znak pred I-tym a reťazec od nasledujúceho za I-tym až do konca. Podobne zapíšeme, ak chceme I-ty (teda jeden znak) nahradiť viacerými, napr. reťazcom '...':

Copy (Retazec, 1, I - 1 ) + '...' + Copy (Retazec, I + 1, MaxInt)

Nasledujúci program vypíše daný text viackrát pod seba: najskôr iba prvý znak, potom prvé dva, prvé tri, ... až vypíše celý reťazec (obr. 92):


obr. 92 Funkcia Copy
obr. 92 Funkcia Copy

Program nám vypíše (obr. 93):

obr. 93 Kopírovanie reťazca – funkcia Copy
obr. 93 Kopírovanie reťazca – funkcia Copy

Ďalšími reťazcovými funkciami sú napr.:

  • UpperCase vráti reťazec, v ktorom budú všetky písmená veľké
  • LowerCase vráti reťazec, v ktorom budú všetky písmená malé
  • Trim vráti reťazec bez medzier na začiatku a na konci
  • Insert vloží znak do reťazca
  • Pos hľadá pozíciu konkrétneho znaku/znakov
  • Ďalšie reťazcové funkcie môžete nájsť v Pomocníkovi (Help) jazyka Free Pascal.
Vytvorte si webové stránky zdarma! Táto stránka bola vytvorená pomocou služby Webnode. Vytvorte si vlastný web zdarma ešte dnes! Vytvoriť stránky