Pod reťazcom v jazyku C rozumieme 1R pole typu char, ktoré je ukončenené špeciálnym znakom - terminátorom. Z uvedeného vyplýva, že veľkosť poľa musí byť vždy o jeden znak väčšia, ako je dĺžka reťazca, ktorý v ňom chceme uchovať.
Reťazec uložený v pamäti RAM si môžeme predstaviť tak ako to je na obr. 1
Reťazec je možné inicializovať podobne ako jednorozmerné pole:
char str[] = "Hello"; // veľkosť alokovanej pamäte 5 + terminátor = 6
char str[20] = "Hello"; // veľkosť alokovanej pamäte 20 --> môžem použiť 19 znakov
char* string = "Hello";// veľkosť alokovanej pamäte 5 + terminátor = 6 ale nemožno meniť obsah „teda len na čítanie!“
obr.1 Grafická reprezentácia reťazca v pamäti RAM
Dôležité príkazy a knižnice kde ich nájdeme
stdio.h
- Načítanie formátovaného textu - scanf() - POZOR! pri reťazcoch nepoužívame &
- Zobrazovanie formátovaného textu - printf()
- Mnoho iných, ktoré je možné nájsť napríklad TU.
string.h
- Zistenie dĺžky reťazca - strlen(const char *str)
- Porovnanie dvoch reťazcov - strcmp(const char *str1, const char *str2)
- Rozdelenie reťazca na viacrero reťazcov - strtok(char *str, const char *delim)
- Mnoho iných, ktoré je možné nájsť napríklad TU.
ctype.h
- Zistenie či je znak veľké písmeno - isupper(znak)
- Zistenie či je znak malé písmeno - islower(znak)
- Prevod znaku na veľké - toupper(znak)
- Prevod znaku na malé písmeno - tolower(znak)
- Zistenie či ide o decimálne číslo - isdigit(int c)
- Mnoho iných, ktoré je možné nájsť napríklad TU.
Použitie príkazov
char text[50]; char znak = 'a'; #include <stdio.h> scanf("%[^\n]", text); // Načítanie reťazca až po stlačenie ENTER (vrátane medzier) scanf("%s", text); // Načítanie reťazca až po stlačenie ENTER alebo po prvú medzeru printf("%s", text); // Vypísanie reťazca #include <string.h> int dlzka = strlen(text); // Dĺžka reťazca resp. počet znakov (okrem terminátora) #include <ctype.h> znak = tolower(znak); // Prevod znaku na malé písmeno znak = toupper(znak); // Prevod znaku na veľké písmeno if( isupper(znak) ) { telo príkazu if } // telo sa vykoná ak je znak veľké písmeno if( islower(znak) ) { telo príkazu if } // telo sa vykoná ak je znak malé písmeno