Reťazce
Čo sú reťazce v C? Reťazec je postupnosť znakov, ktorá slúži na uchovávanie textu. Reťazce v jazyku C sú jednoducho polia znakov ukončených nulou ('\0'). Aby sme mohli používať niektoré príkazy na reťazce musíme si pridať knižnicu <string.h>
Deklarácia:
Inicializácia:
char meno[20]; // Deklarácia reťazca "meno" s kapacitou na 19 znakov a nulovým ukončením.
char meno[] = "Peter"; // Inicializácia reťazca "meno" hodnotou "Peter".
Prístup k individuálnym znakom: Znak v reťazci môžeme získať cez jeho index v reťazci.
char prvyZnak = meno[0]; // Prístup k prvemu znaku reťazca "meno" v našom prípade to bude písmeno P.
Operácie s reťazcami
Konkatenácia (spájanie) reťazcov: Reťazce môžeme spojiť operáciou konkatenácie.
Porovnávanie reťazcov: Porovnávanie dvoch reťazcov. 0 znamená že sú reťazce rovnaké
Neda sa porovnávať retazec1 == retazec2 je to to iste ako
by ste porovnávali pole1 == pole2, porovnávate pointre a nie hodnoty poľa
konkatenácia(spájanie): strcat(retezec1, retezec2); // Spojenie reťazca1 s reťazcom2.
Porovnávanie: int vysledok = strcmp(retezec1, retezec2); // Porovnanie reťazca1 s reťazcom2.
Špeciálne znaky: V reťazcoch môžeme používať špeciálne znaky ako '\n' (nový riadok) alebo '\t' (tabulátor). Viac v tabuľke v kapitole Vstupy a výstupy
Štandardné funkcie pre reťazce: Jazyk C ponúka množstvo štandardných funkcií na prácu s reťazcami, ako napríklad strlen, strcpy, strcat, a ďalšie.
strlen - slúži na zistenie dĺžky reťazca
strcpy - slúži na kopírovanie obsahu jedného reťazca do druhého
Vstup a výstup s reťazcami
Čítanie reťazcov zo vstupu: Pre čítanie reťazcov zo štandardného vstupu môžeme použiť scanf s formátovacím reťazcom %s. Avšak táto funkcia ma jednu chybu a to takú že ako náhle pri zadávaní reťazca z klávesnice použijeme medzeru tak všetko čo napíšeme za medzerou nám už nezoberie. Ak chceme načítať reťazec aj s medzerami musíme použiť funkciu fgets. Funkcia fgets (znamená "file gets") je funkcia v jazyku C, ktorá sa používa na načítanie reťazca (znakového poľa) zo štandardného vstupu alebo z iného súboru. Táto funkcia je užitočná pri načítavaní textu od používateľa z klávesnice alebo zo súboru
Výpis reťazcov: Pre výpis reťazcov môžeme použiť printf s formátovacím reťazcom %s.
syntax: fgets(nazov, veľkosť, zdroj);
nazov - kam sa uloží načítaný reťazec
veľkosť - je maximálny počet znakov (vrátane znaku nového riadku), ktoré sa majú načítať. Pri poli sa najčastejšie používa funkcia sizeof(premenná)
zdroj - je ukazovateľ na súbor, z ktorého sa čítajú dáta. Pre načítanie zo štandardného vstupu (klávesnice) môžete použiť stdin
.
Príklad:
napíšeme program v ktorom bude načítanie reťazca, vypísanie reťazca, kopírovanie jedného reťazca do druhého, spájanie reťazcov a porovnávanie reťazcov.
#include <stdio.h>
#include <string.h>
int main() {
char zdrojovy[50]; // Definujeme pole pre zdrojový reťazec
char cielovy[100]; // Definujeme pole pre cieľový reťazec
char pridany[] = " a niečo navyše";
int dlzka, porovnanie;
// Načítanie reťazca od používateľa možnosť 1
printf("Zadajte zdrojový reťazec: ");
scanf("%s",zdrojovy);
//alebo možnosť 2 fgets(zdrojovy, sizeof(zdrojovy), stdin);
// Vypísanie zdrojového reťazca
printf("Zdrojový reťazec: %s\n", zdrojovy);
// Kopírovanie zdrojového reťazca do cieľového reťazca
strcpy(cielovy, zdrojovy);
// Porovnanie dvoch reťazcov
porovnanie = strcmp(zdrojovy, cielovy);
printf("Reťazce sa rovnajú lebo výsledok porovnavania je: %d\n", porovnanie);
// Vypísanie cieľového reťazca po kopírovaní
printf("Cieľový reťazec po strcpy: %s\n", cielovy);
// Pridanie ďalšieho reťazca k cieľovému reťazcu
strcat(cielovy, pridany);
// Porovnanie dvoch reťazcov
porovnanie = strcmp(zdrojovy, pridany);
printf("Reťazce sa nerovnajú lebo výsledok porovnavania je: %d\n", porovnanie);
// Vypísanie cieľového reťazca po pridávaní
printf("Cieľový reťazec po strcat: %s\n", cielovy);
// Výpočet a výpis dĺžky cieľového reťazca
dlzka = strlen(cielovy);
printf("Dĺžka cieľového reťazca: %d\n", dlzka);
return 0;
}


Úloha číslo 1: Načítajte reťazec od používateľa a skopírujte ho do druhého reťazca pomocou strcpy. Potom vypíšte druhý reťazec.
#include <stdio.h>
#include <string.h>
int main() {
char zdrojovy[50];
char cielovy[50];
printf("Zadajte zdrojový reťazec: ");
fgets(zdrojovy, sizeof(zdrojovy), stdin);
strcpy(cielovy, zdrojovy);
printf("Cieľový reťazec: %s\n", cielovy);
return 0;
}

Úloha číslo 2: Načítajte dva reťazce od používateľa a spojte ich do jedného reťazca pomocou strcat. Potom vypíšte výsledný reťazec.
#include <stdio.h>
#include <string.h>
int main() {
char prvy[50];
char druhy[50];
char spojeny[100];
printf("Zadajte prvý reťazec: ");
fgets(prvy, sizeof(prvy), stdin);
printf("Zadajte druhý reťazec: ");
fgets(druhy, sizeof(druhy), stdin);
strcpy(spojeny, prvy);
strcat(spojeny, druhy);
printf("Spojený reťazec: %s\n", spojeny);
return 0;
}

Úloha číslo 3: Načítajte reťazec od používateľa a vypočítajte a vypíšte jeho dĺžku pomocou strlen.
#include <stdio.h>
#include <string.h>
int main() {
char retezec[100];
printf("Zadajte reťazec: ");
fgets(retezec, sizeof(retezec), stdin);
size_t dlzka = strlen(retezec);
printf("Dĺžka reťazca: %zu\n", dlzka);
return 0;
}

Úloha 4: Načítajte dva reťazce od používateľa, skopírujte prvý reťazec do druhého pomocou strcpy, spojte ich pomocou strcat a vypočítajte a vypíšte dĺžku výsledného reťazca pomocou strlen
#include <stdio.h>
#include <string.h>
int main() {
char prvy[50];
char druhy[50];
char spojeny[100];
int dlzka;
printf("Zadajte prvý reťazec: ");
fgets(prvy, sizeof(prvy), stdin);
printf("Zadajte druhý reťazec: ");
fgets(druhy, sizeof(druhy), stdin);
strcpy(spojeny, prvy);
strcat(spojeny, druhy);
printf("Spojený reťazec: %s\n", spojeny);
dlzka = strlen(spojeny);
printf("Dĺžka spojeného reťazca: %d\n", dlzka);
return 0;
}
