Jazyk C - reťazce: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
 
(2 medziľahlé úpravy od jedného ďalšieho používateľa nie sú zobrazené)
Riadok 3: Riadok 3:
 
{{Skripta_ZI}}
 
{{Skripta_ZI}}
 
__TOC__
 
__TOC__
Reťazce sú vlastne jednorozmerné pole znakov ukončené nulovým znakom '\0'. Null zakončený reťazec teda obsahuje znaky, ktoré tvoria reťazec, za ktorým nasleduje null.
+
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 znakov v slove.
+
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 84: Riadok 84:
 
   printf("strcat( retazec1, retazec2):  %s\n", retazec1);
 
   printf("strcat( retazec1, retazec2):  %s\n", retazec1);
  
   /* Celková dlážka reťazca 1 po pripojení reťazca 2*/
+
   /* Celková dĺžka reťazca 1 po pripojení reťazca 2*/
   len = strlen(retazec1);
+
   dlzka = strlen(retazec1);
 
   printf("strlen(retazec1):  %d\n", dlzka);
 
   printf("strlen(retazec1):  %d\n", dlzka);
  

Aktuálna revízia z 20:27, 14. november 2020


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: Ahoj

C 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