Archív Inet.sk Pôvodný autor: Michal Kyžňanský
16. 06. 2006 o 00:00 12411x

XXIX. Diel C++ - Hlavičkové súbory V. – string.h

Ďalšie pokračovanie predstaví hlavičkový súbor, ktorý sa vám určite bude páčiť a budete ho využívať. Obsahuje veľké množstvo funkcii na prácu s reťazcami.
XXIX. Diel C++ - Hlavičkové súbory V. – string.h
Hlavičkový súbor string.h alebo jeho modernejší ekvivalent cstring je skutočne špecialitou. Nájdete v ňom funkcie od výmyslu sveta na porovnávanie, prehľadávanie reťazcov a inú prácu s nimi. Nemá zmysel rozprávať o ňom ďalej a len teoretizovať. Poďme si funkcie predstaviť v praxi a povedať si čo dokážu. V C++ Builderi nie je nutné pre použitie funkcii z tohto hlavičkového súboru vkladať deklaráciu tohto súboru, ale v iných prostrediach, resp. v konzolovej aplikácie je to nutné.
Vkladáme riadok: #include alebo #include


Kopírovanie reťazca/slova do reťazca – strcpy( )


Skopíruje konkrétny reťazec, alebo zadané slovo do cieľového poľa znakov. Funkcia je jednoduchá a všeobecný zápis je takýto:

strcpy(cieľ - pole znakov,text alebo premennú typu reťazec);

Príklad:
char str[20];
strcpy(str,"ahoj");
ShowMessage(str);


Reťazec sa však dá pri deklarácii premennej typu pole znakov zapísať do premennej aj iným spôsobom ako touto funkciou. Robí sa to tak, že hranaté zátvorky [] pri deklarácii poľa znakov ponecháme prázdne a prekladač sám spočíta dĺžku reťazca. A zapísanie do tejto premennej urobíme iba zápisom = {“reťazec”}.


Príklad:

char ret[] = {"Programovanie"};
ShowMessage(ret);



Spájanie/pripájanie reťazcov – strcat( )


Táto funkcia funguje tak, že pripojí reťazec alebo text na koniec cieľového poľa znakov. Takže vlastne môžeme do jedného cieľového reťazca/poľa znakov pripájať podľa potreby slová, alebo obsah premenných typu reťazec.


Príklad:
char ciel[40],pom[15];		//premenné char - dve polia znakov

strcpy(pom," C++"); //zapísanie slova do premennej pom
strcpy(ciel,"Programovanie"); //zapísanie slova do premennej ciel

strcat(ciel," v jazyku"); //pripojenie slova na koniec poľa
//znakov ciel
strcat(ciel,pom); //pripojenie premennej obsahujúcej
//reťazec na koniec poľa ciel
ShowMessage(ciel);



Porovnávanie reťazcov – strcmp( ) a strcoll( )


Obe tieto funkcie porovnávajú dva reťazce a zisťujú či sa rovnajú alebo ktorý z nich je “väčší” alebo “menší” z lexikografického hľadiska. Zjednodušene povedané, zistia, či sa rovnajú, a ak sa nerovnajú zistia tieto funkcie ktorý je podľa abecedy prvý v poradí. Obe funkcie pracujú rovnako len strcoll ( ) lokálnych jazykových nastavení, ktoré je možné upresňovať, ale tým sa zaoberať nebudeme. Obe funkcie vracajú nasledovné hodnoty:


Vrátená hodnota:
< 0 reťazec1 je menší ako reťazec2
> 0 reťazec1 je väčší ako reťazec2
0 reťazce sa rovnajú

Všeobecný zápis:

strcmp
(reťazec1,reťazec2);

Príklad:
char ret1[20],ret2[20];
int vysl;

strcpy(ret1,"Michal");
strcpy(ret2,"Marek");
vysl = strcmp(ret1,ret2); //priradenie hodnoty funkcie premennej int

//podmienky a výpis výsledku porovnávania
if(vysl == 0){

ShowMessage("Reťazce sú totožné");
}
else{
if(vysl > 0){
ShowMessage("Prvý reťazec je v abecede druhý");
}

if(vysl < 0){
ShowMessage("Prvý reťazec je v abecede prvý");
}
}



Zistenie prvého výskytu znaku v reťazci – strchr ( )


Táto funkcia prehľadáva reťazec a vracia pointer zvyšku prehľadávaného reťazca vrátane hľadaného znaku. Ak nie je zadaný znak nájdený tak funkcia vracia parameter NULL.


Všeobecný zápis:

strchr(reťazec, znak, ktorý hľadáme);

Príklad:
char str[50] = "mama je eva";
char *p;
int a = 0; //premenná reprezentujúca počet písmen
//vyskytujúcich sa v prehľadávanom reťazci




p = strchr(str,'a'); //priradenie premennej výsledok funkcie
while ( p !=NULL) //cyklus, pokiaľ p sa nerovná výsledku,
//že nič nenašlo
{
a++; //zvyšujeme výskyt
p = p+1; //odstráni zo zvyšku reťazca hľadaný znak
//na začiatku
p = strchr(p,'a'); //volanie funkcie s upraveným parametrom
}

ShowMessage(a);




Hľadanie podreťazca v reťazci – strstr ( )


Táto funkcia je nesmierne užitočná, pretože prehľadá daný reťazec a hľadá v ňom výskyt zadaného podreťazca. Funkcia vracia pointer na zvyšok reťazca vrátane hľadaného podreťazca. Ak podreťazec nie je nájdený funkcia vráti NULL.

Všeobecný zápis:

strstr(premenná typu pole znakov/reťazec, hľadaný podreťazec)

Príklad:
char ret[50];

strcpy(ret,"Toto je 29. diel programovania v jazyku C++");

if(strstr(ret,"ahoj") != NULL){ //podmienka AK nájde podreťazec
ShowMessage("našiel som reťazec");
}
else{
ShowMessage("reťazec som nenašiel");
}



Dĺžka reťazca – strlen ( )


Táto funkcia vráti dĺžku reťazca. Dĺžka reťazca je počet písmen v reťazci bez posledného tzv. nulového znaku, ktorý je definovaný ako ‘/0‘.


Príklad:
char ret[30];

strcpy(ret,"Dĺžka reťazca");
ShowMessage(strlen(ret));



Zapísanie na konkrétne miesto v reťazci časť podreťazca – strncat ( )


Táto funkcia už patrí k sofistikovanejším. Umožňuje na koniec jedného reťazca zapísať určitú časť iného reťazca. Takáto metóda sa dá použiť v mnohých funkciách nahradzovania alebo dopĺňania dát.


Všeobecný zápis:

strncat(reťazec1,reťazec2,počet znakov na zapísanie)


Príklad:
char ret1[30], ret2[30];

strcpy(ret1,"Futbal je ");
strcpy(ret2,"dobrý šport");

//číslo 5 vraví, že prvých 5 znakov z druhého reťazca pripojíme
//k prvému reťazcu

strncat(ret1,ret2,5);
ShowMessage(ret1);



Porovnanie pár znakov z jedného reťazca s iným – strncmp( )


Táto funkcia porovnáva prvých n znakov z prvého reťazca s prvými n znakmi druhého reťazca. Funkcia sa dá využiť v širšom triedení, kde je nutné len aby sa pár znakov zhodovalo. Funkcia vracia rovnaké hodnoty ako funkcia porovnávania strncmp ( ).

Všeobecný zápis:

strncmp (reťazec1,reťazec s ktorým chceme porovnávať reťazec1,počet písmen porovnávania od začiatku)


Príklad:
//pole reťazcov, 1. číslo je počet reťazcov, 2. číslo je 
//max dĺžka každého z nich

char ret[5][20]={"Michal" , "Marek" , "Martin" , "Marian", "Jozef"};


int n;

for(n = 0; n < 5; n++){
if (strncmp (ret[n],"Ma**",2) == 0){
ShowMessage(ret[n]); //vypísanie každého, ktorý
//spĺňa podmienky

}
}


Prehľadanie reťazca po znaku a zistenie prvého výskytu akéhokoľvek znaku druhého reťazca – strcspn ( ) a strpbrk ( )


V nadpise je ťažké vysvetliť čo tieto funkcie presne robia. Obe prehľadávajú prvý reťazec po jednotlivých znakoch a hľadajú prvý výskyt akéhokoľvek znaku z druhého reťazca. Rozdiel je v tom, čo funkcie vracajú. Funkcia strcspn ( ) vracia dĺžku prvého reťazca, ak nebol žiadny prvok z druhého reťazca nájdený. Inak vracia hodnotu, ktorá reprezentuje prvok poľa – znak prvého reťazca, ktorý označuje pozíciu, kde sa vyskytuje prvý znak nachádzajúci sa aj v reťazci druhom. Funkcia strpbrk ( ) vracia pointer na zvyšok reťazca, ktorý na začiatku obsahuje nájdený znak, ktorý sa nachádza v oboch reťazcoch.

Príklad1 - strcspn ( ):
//ret1 – reťazec v ktorom hľadáme akýkoľvek prvok ret2 (reťazca 2) 
char ret1[] = {"Einsteinova 42, Bratislava"};
char ret2[] = {"0123456789"};

int a;

//priradíme premennej a výsledok funkcie, teda pozície prvej zhody
a = strcspn (ret1,ret2);

//výpis je robený trošku inak ako sme zvyknutý, ale tento
//zápis docieli, aby sme premennú a – pozíciu dostali medzi vetu.


ShowMessage(AnsiString("zhoda bola odhalená na ret[") + a + "]");



Príklad2 - strpbrk ( ):

char ret1[] = {"Einsteinova 42, Bratislava"}; 
char ret2[] = {"0123456789"};

char *a; //zmena nastala pri deklarácii premennej

a = strpbrk (ret1,ret2);
ShowMessage(a);



Zistenie posledného výskytu znaku v reťazci – strrchr ( )


Táto funkcia zistí pozíciu, na ktorej sa hľadaní znak vyskytuje v reťazci naposledy. Vracia pointer, ktorý ukazuje na časť prehľadávaného reťazca, ktorá obsahuje hľadaný znak a zvyšok pôvodného reťazca.

Všeobecný zápis:

strrchr(prehľadávaný reťazec, hľadaný znak);

Príklad:
char ret1[] = {"Einsteinova 42, Bratislava"}; 
char *a;

a = strrchr (ret1,'s');
ShowMessage(b);


Zistenie dĺžky podreťazca zloženého iba z určených znakov – strspn ( )


Táto funkcia môže v mnohých prípadoch byť odpoveďou na to, čo hľadáme. Dokáže zistiť dĺžku podreťazca v hlavnom reťazci, ktorý je zložený iba zo znakov, ktoré si zadáme do iného reťazca. Za reťazec sa v tomto prípade počítajú určené znaky v hlavnom reťazci, ktoré sú napísané spolu. Funkcia pracuje tak, že vracia počet prečítaných znakov z prvého reťazca, ktoré sa zhodujú z akýmkoľvek znakom druhého dovtedy, kým narazí na nejaký, ktorý sa nenachádza v druhom reťazci.

Príklad:
int i; 
char ret1[] = {"1024MB"};
char ret2[] = {"1234567890"};

i = strspn (ret1,ret2); //int i sa rovná dĺžke hľadaného reťazca

ShowMessage(i);


Delenie reťazca/vety na slová – strtok ( )


Túto funkciu iste rady uvítate. Dokáže rozdeliť reťazec obsahujúci viac slov na jednotlivé slová. Pracuje na princípe, že prehľadáva reťazec a hľadá akýkoľvek zadaný znak nachádzajúci sa ako medzera medzi slovami. Môže teda ísť napríklad o znak “ ” alebo “*” alebo niečo iné. Ak chceme volať túto funkciu viackrát, môžeme použiť pri ďalšom volaní parameter NULL a funkcia bude pokračovať v delení reťazca na slová práve v tom reťazci, s ktorým pracujeme. Funkcia vracia pointer na oddelené slovo. Ak už v reťazci nie je čo deliť vracia hodnotu NULL.

Všeobecný zápis:

strtok(reťazec určený na delenie,”znak reprezentujúci medzeru medzi slovami”);

Príklad:
char ret[] = {"Kupil som si novy LCD monitor"};  
char *c;

c = strtok(ret," "); //prvé volanie tejto funkcie s parametrom
//reťazca

ShowMessage(c);

while(c != NULL){
c = strtok(NULL," "); //druhé volanie – parameter reťazca
//nahradil NULL
ShowMessage(c);
}


Ešte tento hlavičkový súbor obsahuje 4 funkcie na prácu s bufferom, ale nie je nutné sa nimi veľmi zaoberať. V budúcej časti prejdeme na veľmi širokú kapitolu – triedy pre vstup a výstup v jazyku C++ (iostream). Toto sú už čisto prvky C++, ktoré staré C nemá. Predtým si však ešte povieme o špecialitkách pri práci s reťazcami.

Súvisiace články:

Prehľad všetkých dielov

Novinky a inšpirácie

Z nášho blogu

Prečítajte si novinky, inšpirácie a dôležité informácie zo sveta webhostingu a technológií.

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami Oznamy
21. 10. 2026

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami

Vývojársky tím PHP vydal dôležité bezpečnostné záplaty pre všetky oficiálne podporované verzie PHP 8. Na našich serveroch sme nezaváhali ...

Čítať viac
Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás? Oznamy
01. 10. 2026

Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás?

Google oznámil, že v januári 2027 zruší v Gmaile funkciu „Odoslať ako“ (Send as) pre e-mailové adresy od iných poskytovateľov. Ak ste si ...

Čítať viac
Večerná „prestávka“ pre server VIP033 Oznamy
25. 09. 2026

Večerná „prestávka“ pre server VIP033

Neustále pracujeme na tom, aby vaše weby bežali hladko, rýchlo a bezpečne. Technológie idú míľovými krokmi vpred a my v Inet.sk s nimi dr...

Čítať viac
Novinky na Inet.sk (09 / 2026) Novinky
09. 09. 2026

Novinky na Inet.sk (09 / 2026)

Posledné mesiace sme v Inet.sk nevenovali len stabilite serverov, ale najmä počúvaniu vašich reálnych skúseností z každodennej praxe. Výs...

Čítať viac

Podpora klientom

Máte ďalšie otázky?

Nezúfajte, pripravili sme pre Vás jednoduché odpovede na najdôležitejšie otázky, ktoré od našich klientov dostávame.

Zistiť viac

Naše výhody

Prečo si nás vybrať?

Našim klientom ponúkame až 30-dňovú záruku vrátenia peňazí.

Sme skutočný slovenský webhosting

Slovenská
firma

Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.

Na nás sa môžete kedykoľvek spoľahnúť

Dlhoročné
skúsenosti

Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.

Naši prví zákazníci sú stále s nami

Spokojní
zákazníci

Naši zákazníci sú ako naša rodina, preto nám verí už viac ako 1250 klientov.

Maximálna bezpečnosť

Maximálna
bezpečnosť

Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.

Prozákaznícka podpora

Ochotná
podpora

Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.

Kvalita a dobrá cena

Férová
cena

Cena pri obnove je rovnaká ako pri objednávke. Nezdražujeme po prvom roku a bez skrytých poplatkov.

U nás sa Vám nič nestratí

Pravidelné
zálohovanie

Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.

Svižný Admin Panel nájdete len u nás

Prehľadný
Admin Panel

Máme rýchly a prehľadný Admin Panel, ktorý zvládne používať naozaj každý.

Správa používateľov

Správa
používateľov

Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.

Máme zľavy pre verných klientov

Vernostné
zľavy

Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.

My Vás nebudeme obmedzovať

Bez
obmedzení

Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.

Hosting pre WordPress

WordPress
na 1 klik

Nainštalujte si obľúbené redakčné systémy rýchlo a jednoducho.

Referencie

Spokojní zákazníci

Pozrite sa, čo o nás povedali naši klienti. Neváhajte a pridajte sa k nám ešte dnes.

Auto 100
Bystricoviny
eCall Slovakia
Filip Jančík
Frost
Merkury Broker
Mi:Su Design
Mesto Nitra
Pro Clienta
Schneider Lekáreň
Vego Marketing
Mesto Zlaté Moravce

Všetky ceny sú uvádzané bez DPH
© 2006 - 2026, Inet.sk, s. r. o., Všetky práva vyhradené

Na našej stránke používame "cookies". Vďaka nim sledujeme návštevnosť, prispôsobujeme reklamu a používateľské nastavenia, čo zlepšuje Váš zážitok z našej stránky. Súhlasíte s ich spracovaním?
Vlastné nastavenia cookies