Veronika Dropčová
veronika.dropcova(at)gmail.com

   nika.blog.matfyz.sk

08 – string 2

Kúsok teórie: Dnes sa naučíme tri nové funkcie (resp. procedúry), ktoré sú už v pascale pripravené na prácu so stringami.

 

Prvou z nich je funkcia Copy, ktorá vie z reťazca vybrať nejaký podreťazec. (Zamyslite sa – ako vieme z reťazca vybrať iba jeden znak?)

Funkcia Copy má 3 parametre:

Copy(z_coho, od_ktorej_pozicie, kolko);

Ide o funkciu, teda má „nejaký výsledok“, teda ju musíme priradiť do nejakej stringovej premennej, napr.:

 

var slovo,podslovo:string;

slovo:=’Vianoce’;

podslovo:=copy(slovo,1,3); //v premennej podslovo bude ulozene ‘Via’

podslovo:=copy(slovo,2,20); //do premennej podslovo sa dostane ‘ianoce’, teda menej ako 20 znakov

podslovo:=copy(slovo,8,2); //do premennej podslovo sa dostane iba prázdny reťazec

podslovo:=copy(slovo,4,1); //do premennej podslovo sa dostane „n“, chápaný bude ale ako reťazec, nie ako char!

 

Často sa budeme stretávať so zápisom copy(slovo, i, maxint), kde maxint znamená čosi ako „koniec slova“ (v princípe je to maximálna celočíselná hodnota zapísateľná do premennej typu integer).

 

Ďalšou funkciou je funkcia Pos. Jej úlohou je zistiť, kde sa v reťazci nachádza konkrétne slovo. Ak je takýchto slov v jednom reťazci viac, vyhodí pozíciu prvého z nich.

Opäť – ide o funkciu, teda má nejaký výsledok, s ktorým musíme nejako pracovať. Výsledok je číselný, tak si zadeklarujeme premennú typu integer:

var pozicia:integer;
r:string;

r:=’Vianoce su v noci.’;
pozicia:=pos(‘su’,r); // vysledkom je 9
pozicia:=pos(‘noc’,r); // vysledkom je 4
pozicia:=pos(‘jar’,r); // vysledkom je 0
pozicia:=pos(‘ ‘,r); // vysledkom je 8

 

Ďalšie dva príkazy sú procedúry Delete a Insert (keďže ide o procedúry, netreba ich nikam priraďovať, stačí ich len zavolať):

– delete má tri parametre, rovnaké ako Copy – z_coho, od_ktorej_pozicie, kolko

– insert slúži na vkladanie podreťazca do reťazcovej premennej, tiež má tri parametre: co_vkladam, kam_vkladam, od_ktorej_pozicie

s := ‘abrakadabra’; Delete(s, 4, 6); // s = ‘abrra’

s := ‘abrakadabra’; Delete(s, 6, 20); // s = ‘abrak’

s := ‘abrakadabra’; Delete(s, 1, 1); // s = ‘brakadabra’
s := ‘abrakadabra’; Insert(‘*’, s, 2); // s = ‘a*brakadabra’
s := ‘abrabra’; Insert(‘kada’, s, 5); // s = ‘abrakadabra’
s := ‘abrabra’; Insert(‘kada’, s, 10); // s = ‘abrabrakada’
s := ‘abxy’; Insert(s, s, 3); // s = ‘ababxyxy’

 

Ďalšie funkcie na prácu s reťazcami:

– UpperCase(text) // vráti reťazec, v ktorom budú všetky písmená veľké
– LowerCase(text) // vráti reťazec, v ktorom budú všetky písmená malé
– Trim(text) // vráti reťazec bez medzier na začiatku a na konci

 

Úlohy

1. Zistite, koľkokrát sa v nejakom reťazci objavuje nejaký podreťazec, napr. v reťazci „mama ma emu a ema ma mamu“ podreťazec „ma“.

 

2. Pomocou funkcií copypos rozdeľte vetu zo vstupného riadku na slová.

 

3. Program z prečítaného reťazca vyhodí všetky zbytočné medzery – nechá len po jednej medzi slovami.

 

4. Program zo zadanej vety vyhodí všetky samohlásky.

 

5. Program o zadanom texte zistí, či je to palindróm. Ak sa text rovnako číta zľava ako sprava (ak si nevšímame medzery), tak sa volá palindróm. Napríklad, veľmi známym palindrómom je ‘jelenovi pivo nelej’. Ak zadaný text vyhovuje podmienke palindrómu, tak program vypíše správu ‘je to palindróm’.

 

6. Program v zadanej vete každý výskyt medzery nahradí dvoma medzerami.

 

Domáca úloha, deadline 23.4.2017 o 23:59

Úloha č. 5.

BONUS za 1,5 bodov, deadline 23.4.2017 o 23:59

Úloha č. 6.

 

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *