1 / 28

Standardní knihovní funkce pro práci s textovými řetězci

Verze 2009.01. Standardní knihovní funkce pro práci s textovými řetězci. 11. A1PRG - Programování – Seminář Ing. Michal Heczko heczko@fai.utb.cz. Agenda. Znak Řetězec Definice řetězce Práce s řetězci – vstup a výstup Funkce pro práci s řetězci. Znak. Datový typ char

mayda
Download Presentation

Standardní knihovní funkce pro práci s textovými řetězci

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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ě:

  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 <stdio.h> #include <stdlib.h> 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 <string.h> • Zjištění délky řetězce: intstrlen(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 <string.h> • 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 <string.h> • 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 <string.h> • 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: charstr[10] = ″ahoj″; strchr(str, ‘x’); // Výsledek: NULL

  17. Funkce pro práci s řetězci • Hlavičkový soubor <string.h> • 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: charstr[10] = ″ahoj″; strstr(str,″xy″); // Výsledek: NULL

  18. Funkce pro práci s řetězci • Hlavičkový soubor <string.h> • 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 <string.h> • 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 <string.h> • 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 <stdlib.h> • Převod řetězce na celé číslo: intatoi(char *s); • Vrací celočíselnou hodnotu obsahu řetězce. • Zkratka z Ascii TOInt. • Př.: charcislo[] = ″241″; int hodnota; hodnota = atoi(cislo);

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

  23. Funkce pro práci s řetězci • Hlavičkový soubor <stdlib.h> • 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 TOFloat. • Př.: charcislo[] = ″241.1″; double hodnota; hodnota = atof(cislo);

  24. Testování tříd znaků • Hlavičkový soubor <ctype.h> • 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 <ctype.h>

  26. Konverze znaku • Hlavičkový soubor <ctype.h> • 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 <ctype.h>

  28. A1PRG-s 11. Řetězce Děkuji za pozornost Ing. Michal Heczko heczko@fai.utb.cz 218/U3 Prezentace k dispozici na http://vyuka.fai.utb.cz

More Related