Jazyk C - reťazce
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: 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