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

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

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

Podobné prezentace


Prezentace na téma: "Standardní knihovní funkce pro práci s textovými řetězci"— Transkript prezentace:

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

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ě: 1 2 3 4 5 6 7 T E X \0

6 Řetězec Definice řetězce Statická Dynamická 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(): 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: 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 <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: char str[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: char str[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: 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 <stdlib.h> 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 <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 TO Float. Př.: char cislo[] = ″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> Makro
Kdy 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 <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> Makro Popis
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 "Standardní knihovní funkce pro práci s textovými řetězci"

Podobné prezentace


Reklamy Google