Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci s textovými řetězci 11 Verze 2009.01.

Podobné prezentace


Prezentace na téma: "A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci s textovými řetězci 11 Verze 2009.01."— Transkript prezentace:

1 A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci s textovými řetězci 11 Verze

2 Agenda  Znak  Řetězec  Definice řetězce  Práce s řetězci – vstup a výstup  Funkce pro práci s řetězci

3 Znak  Datový typ char  Uložení jednoho znaku – ukládá se ve formátu celého čísla odpovídající kódu v ASCII tabulce  Příklad: char x = ´N´;

4 Řetězec  Jednorozměrné pole složené z prvků datového typu char.  Pro každý řetězec je rezervovaný určitý blok paměti.  Řetězec je zakončen speciálním znakem ‘\0’.  Znaky za ‘\0’ jsou neaktivní.

5 Řetězec  Příklad:  Je definován řetězec o délce 8 znaků, který obsahuje text „TEXT“  Obsah paměti bude vypadat následovně: TEXT\0

6 Řetězec  Definice řetězce  Statická  Bez inicializace char retezec[10];  S inicializací char retezec1[10] = ″text″; char retezec2[] = ″text″;  Dynamická char *retezec; retezec = (char *) malloc(10);

7 Řetězec  Řetězci nelze přiřadit konstantní hodnotu: char str[10]; str = ″text″;  Nutno použít funkci strcpy(): char str[10]; strcpy(str,″text″);

8 Práce s řetězcem  Načtení řetězce z terminálu: scanf(″%s″,&retezec);  Není nutno zadávat ukončovací znak ‘\0’, ten je doplněn automaticky.  Přečte řetězec ukončený bílým znakem (např. znak enter, ale i mezera).  Pokud je nutné načíst řetězec včetně mezer, možno použít funkci gets()

9 Práce s řetězcem  Výpis řetězce na terminál: printf(″%s″,retezec);

10 Práce s řetězcem  Příklad: #include int main() { char *jmeno; if ((jmeno = (char *) malloc(20)) == NULL) { printf(″Nedostatek pameti″); return 1; }...

11 Práce s řetězcem  Příklad:... printf(″Zadejte sve jmeno: ″); scanf(″%s″, jmeno); printf(″Vase jmeno je %s″, jmeno); free(jmeno); return 0; }

12 Přístup k jednotlivým znakům  Řetězec je pole, takže k jednotlivým znakům se přistupuje jako k prvkům pole.  Na konec však nutno doplnit ukončovací znak.  Příklad: char text[11]; for (int i = 0; i < 10; i++) { text[i] = ‘x’; } text[10] = ‘\0’;

13 Funkce pro práci s řetězci  Hlavičkový soubor  Zjištění délky řetězce: int strlen(char *s);  Vrátí délku (počet znaků) řetězce bez ukončovacího znaku.  Návratová hodnota: počet znaků  Příklad: strlen(″ahoj″); // výsledek: 4

14 Funkce pro práci s řetězci  Hlavičkový soubor  Kopírování řetězce: char *strcpy(char *s1, char *s2);  Zkopíruje obsah řetězce s2 do řetězce s1.  Návratová hodnota: ukazatel na začátek řetězce s1  Příklad: strcpy(str, ″ahoj″);

15 Funkce pro práci s řetězci  Hlavičkový soubor  Kopírování řetězce: char *strcat(char *s1, char *s2);  Připojí obsah řetězce s2 k řetězci s1.  Návratová hodnota: ukazatel na začátek řetězce s1  Příklad: strcat(str, ″ahoj″);

16 Funkce pro práci s řetězci  Hlavičkový soubor  Nalezení znaku v řetězci: char *strchr(char *s, char c);  Návratová hodnota: Ukazatel na první výskyt znaku c v řetězci s nebo hodnota NULL.  Příklad: char str[10] = ″ahoj″; strchr(str, ‘x’); // Výsledek: NULL

17 Funkce pro práci s řetězci  Hlavičkový soubor  Nalezení podřetězce v řetězci: char *strstr(char *s1, char *s2);  Návratová hodnota: Ukazatel na první výskyt podřetězce s2 v řetězci s1 nebo hodnota NULL.  Příklad: char str[10] = ″ahoj″; strstr(str, ″xy″); // Výsledek: NULL

18 Funkce pro práci s řetězci  Hlavičkový soubor  Porovnání dvou řetězců: int *strcmp(char *s1, char *s2);  Návratová hodnota: Vrátí 0, pokud jsou řetězce shodné, záporné číslo, pokud je s1 lexiograficky menší, kladné, pokud je větší.

19 Funkce pro práci s řetězci  Hlavičkový soubor  Práce s omezenou částí řetězce:  Funkce mají v názvu znak n. Pracují pouze s prvními n znaky Př.: char *strncpy(char *s1, char *s2, int max);

20 Funkce pro práci s řetězci  Hlavičkový soubor  Práce s řetězcem pozpátku:  Funkce mají v názvu znak r. Pracují s řetězcem zprava doleva. Př.: char *strrchr(char *s, char c);

21 Funkce pro práci s řetězci  Hlavičkový soubor  Převod řetězce na celé číslo: int atoi(char *s);  Vrací celočíselnou hodnotu obsahu řetězce.  Zkratka z Ascii TO Int.  Př.: char cislo[] = ″241″; int hodnota; hodnota = atoi(cislo);

22 Funkce pro práci s řetězci  Hlavičkový soubor  Převod řetězce na dlouhé celé číslo: long atol(char *s);  Vrací celočíselnou hodnotu obsahu řetězce.  Zkratka z Ascii TO Long.  Př.: char cislo[] = ″241″; long hodnota; hodnota = atol(cislo);

23 Funkce pro práci s řetězci  Hlavičkový soubor  Převod řetězce na racionální číslo: double atof(char *s);  Vrací hodnotu obsahu řetězce. Hodnota datového typu racionální číslo s dvojitou přesností.  Zkratka z Ascii TO Float.  Př.: char cislo[] = ″241.1″; double hodnota; hodnota = atof(cislo);

24 Testování tříd znaků  Hlavičkový soubor  Všechny makra pro testování tříd znaků jsou zapsány ve tvaru: istypznaku(znak);  Návratovou hodnotou je 0, pokud se nejedná o daný typ znaku, v opačném případě nenulová hodnota.

25 Testování tříd znaků  Hlavičkový soubor MakroKdy vrací nenulovou hodnotu isalnum(z); … číslice, malé nebo velké písmeno isalpha(z); … malé nebo velké písmeno isdigit(z); … číslice islower(z); … malé písmeno isprint(z); … tisknutelný znak (včetně mezery) isspace(z); … mezera, tabulátor nebo konec řádku isupper(z); … velké písmeno isxdigit(z); … hexadecimální číslice

26 Konverze znaku  Hlavičkový soubor  Všechny makra pro konverzi znaku jsou zapsány ve tvaru: totypznaku(znak);  Návratovou hodnotou je znak převedený na daný typ znaku.

27 Konverze znaku  Hlavičkový soubor MakroPopis toupper(z); … převod na velké písmeno tolower(z); … převod na malé písmeno

28 A1PRG-s 11. Řetězce Děkuji za pozornost Ing. Michal Heczko 218/U3 Prezentace k dispozici na


Stáhnout ppt "A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci s textovými řetězci 11 Verze 2009.01."

Podobné prezentace


Reklamy Google