Kdo by to slovo neznal, je to to samé, jako řetězce. String je v c-čku vlastně jen
pole znaků, narozdíl od pascalu a basicu, které mají string jako datový typ.
String se v C-čku, jak už jsem na to narazil musí ukončit nulou. Potom to vypadá
takhle - string "Ahoj..." v paměťi :
Řekl jsem že řetězec je pole znaků. To neplatí v C ++ kde pro stringy máme objekt,
ale pro teď je to pointer na char :
char *muj_string;
char kratky_string[20];
|
Tak, to jsou dvě definice řetězce. První má nevýhodu že se musí alokovat
a ta druhá má nevýhodu že do ní jde schovat jen 19 znaků (dvacátá bude nula)
Ta nula tam musí být, podle ní poznají funkce pro práci se stringy, kde řetězec
končí. (Pokud jste četli kapitolu o pointrech, víte, že velikost dynamického
pole se nedá určit ...) Z toho vyplývá, že řetězec vynulujete takhle :
char *pointer;
pointer = (char*) malloc(11 * sizeof(char));
pointer[0] = 0; // Nulu hned na první místo
|
Teď ty funkce :
12.0 Funkce ze stdio.h
Ve stdio.h jsou definovány jisté funkce, které se stara -
jí o řetězce. Jsou to :
sprintf(pointer, format_retezec, parametry)
Toto je standartní funkce printf, jenže je nasměrovaná
do řetězce. Kdo zapomněl, je to ve čtvrté kapitole. Pokud se tam
někdo podíval, zjistili jste, že je tam taky scanf :
scanf(format_retezec, pointer)
Funguje stejně, jako klasická scanf, jenže je taky
(jako sprintf()) nasměrovaná do stringu ...
12.1 Funkce ze string.h
String.h je modul, specielně pro řetězce. Zde jsou funkce :
strcpy(char *a, char *b)
Tato funkce zkopíruje řetězec b do a.
strcat(char *a, char *b)
Tato funkce přidá řetězec b k řetězci a.
strcmp(char *a, char *b)
Tato funkce porovná řetězece b a a. Vrací
nulu, pokud jsou stejné, záporné číslo, pokud je a
menší, než b, a kladné, když naopak (třeba "Ahoj"
je menší než "Bum" - používá se to pro řazení stringů) ...
strchr(char *a, char b)
Tato funkce vrátí ukazatel na 1. výskyt znaku b v stringu a.
Pokud tam takový není, vrací NULL.
strstr(char *a, char *b)
Tato funkce vrátí ukazatel na 1. výskyt stringu b v stringu a.
Pokud tam takový string není, vrací NULL.
Poznámka : pokud přidáte do názvu funkce za str písmeno r,
funkce bude pracovat odzadu, např.: strrchr
Pak tu jsou ještě funkce atoi, atol, atof, které převádí
stringy na čísla integer, long, nebo float.
znění je :
int atoi(char *str)
A u těch druhých je to podobné. Teď už byste byli schopni dopsat
i ten cheater tak, aby vyhledával, jen si to pro procvičení zkuste ;-)
Cvičení :
1) - Dopsat cheater
2) - Napište funkci, která "odřízne" z adresy poslední zpětné lomítko
(pokud tam je)
3) - Napište program, kterému zadáte jména všech svých přítelkyň,
ten je uloží do spojového seznamu a seřadí podle jména. Použijte strcmp()
4) - Napište funkci, která z textu "x = 10 y = 15 z =-3" vytáhne
hodnoty x, y a z. (výraz se bude číst z klávesnice,
takže je potřeba ošetřit chyby)
5) - Napište funkci, která najde v zadaném stringu znak "x" a až do konce
text vyplní tečkami. (x tam zůstane)
Zatím se mějte hezky !
-tHE SWINe-