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
  • No labels