Jazyk C - reťazce: Rozdiel medzi revíziami
 (Vytvorená stránka „Kategória:Študijné materiály Kategória:Informatika {{Skripta_ZI}} Reťazce sú vlastne jednorozmerné pole znakov ukončené nulovým znakom '\0'. Null zako…“)  | 
				|||
| (9 medziľahlých úprav od 5 ďalších používateľov nie je zobrazených) | |||
| Riadok 2: | Riadok 2: | ||
[[Kategória:Informatika]]  | [[Kategória:Informatika]]  | ||
{{Skripta_ZI}}  | {{Skripta_ZI}}  | ||
| − | Reťazce sú vlastne jednorozmerné pole znakov ukončené nulovým znakom '\0'.   | + | __TOC__  | 
| + | Reťazce sú vlastne jednorozmerné pole znakov ukončené nulovým znakom '\0'. Reťazec teda obsahuje znaky a ako posledný znak je nulový znak '\0'.  | ||
| − | Nasledujúce deklarácia a inicializácia vytvoria reťazec pozostávajúci zo slova „Ahoj“. Každý reťazec musí byť ukončený nulovým znakom '\0', preto veľkosť poľa znakov obsahujúceho reťazec je vždy o +1 väčší ako je počet   | + | Nasledujúce deklarácia a inicializácia vytvoria reťazec pozostávajúci zo slova „Ahoj“. Každý reťazec musí byť ukončený nulovým znakom '\0', preto veľkosť poľa znakov obsahujúceho reťazec je vždy o +1 väčší ako je počet písmen vo výraze.  | 
'''Iniciálizácia'''  | '''Iniciálizácia'''  | ||
| Riadok 31: | Riadok 32: | ||
int main () {  | int main () {  | ||
| − |     char slovo[5] = {'A', 'h, 'o', 'j','\0'};  | + |     char slovo[5] = {'A', 'h', 'o', 'j','\0'};  | 
| + |    /*poprípade môžme pole inicializovať takto:  | ||
| + |    char slovo[5] = "Ahoj";  | ||
| + |    */  | ||
| + | |||
    printf("Vypisane slovo: %s\n", slovo);  |     printf("Vypisane slovo: %s\n", slovo);  | ||
    return 0;  |     return 0;  | ||
| Riadok 39: | Riadok 44: | ||
<source>  | <source>  | ||
Vypisane slovo: Ahoj  | Vypisane slovo: Ahoj  | ||
| + | </source>  | ||
| + | |||
| + | C podporuje širokú škálu funkcií, ktoré manipulujú s reťazcami ukončenými nulovou hodnotou.  | ||
| + | {|class="wikitable" style="text-align: center;  | ||
| + | |-  | ||
| + | ! !! Funkcia  !! Účel  | ||
| + | |-  | ||
| + | | 1 || [[Strcpy (jazyk C)|strcpy (s1);]] || Skopíruje reťazec s2 do reťazca s1.  | ||
| + | |-  | ||
| + | | 2 || [[Strcat(jazyk C)|strcat (s1);]]  || Pripojí reťazec s2 na koniec reťazca s1.  | ||
| + | |-  | ||
| + | | 3 || [[Strlen (jazyk C)|strlen (s1);]] || Vráti dĺžku reťazca s1.  | ||
| + | |-  | ||
| + | | 4 || [[Strcmp (jazyk C)|strcmp (s1);]]  || Vráti 0, ak sú s1 a s2 rovnaké; menej ako 0, ak s1 <s2; väčšie ako 0, ak s1> s2.  | ||
| + | |-  | ||
| + | | 5 || [[Strchr (jazyk C)|strchr (s1);]] || Vracia ukazovateľ na prvý výskyt znaku ch v reťazci s1.  | ||
| + | |-  | ||
| + | | 6 || [[Strstr (jazyk C)|strstr (s1);]] || Vráti ukazovateľ na prvý výskyt reťazca s2 v reťazci s1.  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | Nasledujúci príklad používa niektoré z vyššie uvedených funkcií.  | ||
| + | <source lang="c" line>  | ||
| + | #include <stdio.h>  | ||
| + | #include <string.h>  | ||
| + | int main () {  | ||
| + | |||
| + |    char retazec1[12] = "Ahoj";  | ||
| + |    char retazec2[12] = "svet";  | ||
| + |    char retazec3[12];  | ||
| + |    int  dlzka;  | ||
| + | |||
| + |    /* Skopírovanie reťazca 1 do reťazca 3 */  | ||
| + |    strcpy(retazec3, retazec1);  | ||
| + |    printf("strcpy( retazec3, retazec1) :  %s\n", retazec3);  | ||
| + | |||
| + |    /* "Prilepenie" retazec2 za  retazec1*/  | ||
| + |    strcat( retazec1, retazec2);  | ||
| + |    printf("strcat( retazec1, retazec2):   %s\n", retazec1);  | ||
| + | |||
| + |    /* Celková dĺžka reťazca 1 po pripojení reťazca 2*/  | ||
| + |    dlzka = strlen(retazec1);  | ||
| + |    printf("strlen(retazec1):  %d\n", dlzka);  | ||
| + | |||
| + |    return 0;  | ||
| + | }  | ||
| + | </source>  | ||
| + | Vystup.  | ||
| + | <source>  | ||
| + | strcpy( retazec3, retazec1):  Hello  | ||
| + | strcat(retazec1, retazec2):   HelloWorld  | ||
| + | strlen(retazec1):  10  | ||
</source>  | </source>  | ||
Aktuálna revízia z 19:27, 14. november 2020
Učebné texty
Obsah
Reťazce sú vlastne jednorozmerné pole znakov ukončené nulovým znakom '\0'. Reťazec teda obsahuje znaky a ako posledný znak je nulový znak '\0'.
Nasledujúce deklarácia a inicializácia vytvoria reťazec pozostávajúci zo slova „Ahoj“. Každý reťazec musí byť ukončený nulovým znakom '\0', preto veľkosť poľa znakov obsahujúceho reťazec je vždy o +1 väčší ako je počet písmen vo výraze.
Iniciálizácia
char slovo[5] = {'A', 'h', 'o', 'j','\0'};Ak budete postupovať podľa pravidla inicializácie poľa, môžete vyššie uvedený príkaz napísať nasledovne.
char slovo[5] = "Ahoj";Prezentácia pamäte vyššie definovaného reťazca v C.
| Index | 0 | 1 | 2 | 3 | 4 | 
| Premenná | A | h | o | j | \0 | 
V skutočnosti neukladáte nulový znak na koniec reťazcovej konštanty. Keď inicializuje pole, kompilátor C ho automaticky umiestni '\ 0' na koniec reťazca. Pokúsme sa vypísať vyššie uvedený reťazec.
 1 #include <stdio.h>
 2 
 3 int main () {
 4 
 5    char slovo[5] = {'A', 'h', 'o', 'j','\0'};
 6    /*poprípade môžme pole inicializovať takto:
 7    char slovo[5] = "Ahoj";
 8    */
 9 
10    printf("Vypisane slovo: %s\n", slovo);
11    return 0;
12 }
Vystup.
Vypisane slovo: AhojC podporuje širokú škálu funkcií, ktoré manipulujú s reťazcami ukončenými nulovou hodnotou.
| Funkcia | Účel | |
|---|---|---|
| 1 | strcpy (s1); | Skopíruje reťazec s2 do reťazca s1. | 
| 2 | strcat (s1); | Pripojí reťazec s2 na koniec reťazca s1. | 
| 3 | strlen (s1); | Vráti dĺžku reťazca s1. | 
| 4 | strcmp (s1); | Vráti 0, ak sú s1 a s2 rovnaké; menej ako 0, ak s1 <s2; väčšie ako 0, ak s1> s2. | 
| 5 | strchr (s1); | Vracia ukazovateľ na prvý výskyt znaku ch v reťazci s1. | 
| 6 | strstr (s1); | Vráti ukazovateľ na prvý výskyt reťazca s2 v reťazci s1. | 
Nasledujúci príklad používa niektoré z vyššie uvedených funkcií.
 1 #include <stdio.h>
 2 #include <string.h>
 3 int main () {
 4 
 5    char retazec1[12] = "Ahoj";
 6    char retazec2[12] = "svet";
 7    char retazec3[12];
 8    int  dlzka;
 9 
10    /* Skopírovanie reťazca 1 do reťazca 3 */
11    strcpy(retazec3, retazec1);
12    printf("strcpy( retazec3, retazec1) :  %s\n", retazec3);
13 
14    /* "Prilepenie" retazec2 za  retazec1*/
15    strcat( retazec1, retazec2);
16    printf("strcat( retazec1, retazec2):   %s\n", retazec1);
17 
18    /* Celková dĺžka reťazca 1 po pripojení reťazca 2*/
19    dlzka = strlen(retazec1);
20    printf("strlen(retazec1):  %d\n", dlzka);
21 
22    return 0;
23 }
Vystup.
strcpy( retazec3, retazec1):  Hello
strcat(retazec1, retazec2):   HelloWorld
strlen(retazec1):  10