VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu CZ.1.07/1.5.00/34.1076 Název projektu Pro vzdělanější Šluknovsko Číslo a název šablony 32 Inovace a zkvalitnění výuky prostřednictvím ICT Autor 0207 Mgr. Bc. Jan Škoda Tematická oblast Programování Číslo a název materiálu VY_32_INOVACE_0207_0218 Knihovna <string.h> Anotace Žák si upevní učivo o knihovně <string.h> v programovacím jazyku C Vytvořeno 22. 7. 2013 Určeno pro 3. ročník oboru Informační technologie Přílohy Bez příloh
Metodický list Učitel: Výklad s projekcí elektronického učebního materiálu. Demonstrace v reálném prostředí. Ukázka obecného postupu činností. Monitorování činnosti žáků. Žák: Sleduje výkladovou projekci a demonstraci učitele. Procvičuje na reálném prostředí softwaru.
Jazyk c++ Knihovna <string.h>
Řetězce Jazyk C nemá implementovaný speciální datový typ pro řetězce (např. string). Ty jsou proto v C reprezentovány jako pole prvků typu char, kde je v každém prvku uložena ASCII hodnota příslušného znaku řetězce. Jako poslední musí být vždy uveden znak EOS (end of string), což je znak s ASCII hodnotou 0. Ten označuje konec řetězce. Funkce pro práci s řetězci jsou součástí standardní knihovny funkcí a jejich prototypy jsou obsaženy v hlavičkovém souboru string.h.
Řetězce Řetězce se definují stejně jako pole. Je třeba dát si pozor na to, abychom při definování velikosti nezapomněli na znak EOS. Pole prvků char lze inicializovat při definici výčtem jednotlivých prvků: char string[]={'p','o','l','e','\0'};
Řetězce Jednotlivé znakové konstanty představují ASCII hodnoty, které jsou do pole string uloženy. Jako poslední znak pak nesmíme zapomenout vložit znak EOS. Tento způsob inicializace ale není zrovna moc pohodlný, a tak je možné při definici inicializovat přímo řetězcovou konstantou: char string[]="pole";
Kopírování řetězců Protože řetězce jsou vlastně jen obyčejná pole, není možné je přiřazovat, sčítat je, ani provádět s nimi jiné podobné operace. Naštěstí jazyk C nabízí pro tyto účely již předdefinované funkce. char *strcpy(char cil[], char zdroj[])
Kopírování řetězců Pro kopírování jednoho řetězce do druhého je v C připravena funkce strcpy, která má dva argumenty, řetězce cil a zdroj. Bez ohledu na obsah a velikost řetězce cil je do něho postupně, znak po znaku, kopírován obsah řetězce zdroj, a to až do doby kdy se narazí na znak EOS. Tento znak je posledním zkopírovaným znakem. Při používání funkce strcpy je nutné zajistit, aby pole cil mělo vždy dostatečnou velikost na to, aby se do něj řetězec zdroj vešel. Návratovou hodnotou funkce strcpy je ukazatel na řetězec cil.
Příklad char *strcpy(char cil[], char zdroj[]) { unsigned int i=0; do { cil[i]=zdroj[i]; i++; } while (zdroj[i-1]!= '\0'); return cil; }
Spojování řetězců Funkce strcat jednoduše připojí řetězec zdroj za řetězec cil. Stejně jako u funkce strcpy, ani u strcat se neberou ohledy na skutečnou velikost paměti alokované pro pole cil. To musí být dostatečně velké, aby pojalo oba řetězce cil a zdroj i se znakem EOS. char * strcat (char cil[], char zdroj[])
Zjišťování délky řetězce Pro zjišťení délky řetězce nám jazyk C nabízí funkci strlen. Jako svou návratovou hodnotu vrací délku řetězce, který jí byl předán parametrem. int strlen(char str[])
Porovnání dvou řetězců Funkce strcmp porovnává řetězce str1 a str2 a vrací zápornou hodnotu v případě, že řetězec s1 je lexikograficky menší než řetězec s2 a kladné číslo v případě, že s1 je větší než s2. Jsou-li oba řetězce stejné, je funkcí vrácena hodnota 0. int strcmp (char str1[], char str2[])
Příklad char s1[]="retezec"; char s2[]="pole"; char s3[20]; strcpy(s3, s1); //zkopíruje s1 do s3 strcat(s3, " a "); //připojí řetězec " a " k s3 strcat(s3, s2); //připojí řetězec s2 k s3
Přehled funkcí knihovna string.h strcpy(a,b) Zkopíruje řetězec b do řetězce a; vrací ukazatel na začátek a. Řetězec a musí být dostatečně dlouhý, aby se do něj vešla kopie b i s koncovou nulou. strcat(a,b) Přidá řetězec b na konec řetězce a (tj. přepíše vše počínaje koncovým nulovým znakem); vrací ukazatel na začátek a. Řetězec a musí být dostatečně dlouhý, aby se do něj vešly spojené řetězce i s koncovou nulou. strcmp(a,b) Porovná řetězce a a b; vrací číslo <0 / 0 / >0, je-li a lexikograficky menší / rovno / větší než b.
Přehled funkcí knihovna string.h strlen(a) Vrací délku řetězce a (počet znaků před ukončujícím nulovým znakem). strchr(a,c) Hledá, zda je v řetězci a obsažen znak c. Pokud ano, vrátí ukazatel na první výskyt znaku; pokud ne, vrátí NULL. strstr(a,b) Hledá, zda je v řetězci a obsažen podřetězec b. Pokud ano, vrátí ukazatel na začátek prvního výskytu podřetězce; pokud ne, vrátí NULL.
Přehled funkcí knihovna ctype.h isalpha(znak) Je znak písmeno (malé nebo velké)? isdigit(znak) Je znak dekadická číslice? isxdigit(znak) Je znak hexadecimální číslice (0-9, a-f, A-F)? isalnum(znak) Je znak písmeno nebo číslice?
Přehled funkcí knihovna ctype.h ispunct(znak) Je znak speciální (tisknutelný, ale ani písmeno ani číslice)? isprint(znak) Je znak tisknutelný (písmeno, číslice, speciální nebo mezera)? isgraph(znak) Má znak grafickou podobu (písmeno, číslice, speciální, ale ne mezera)? iscntrl(znak) Jde o řídicí znak (v kódu ASCII jsou to znaky s kódem <32 nebo =255, pokud nejde o znaky bílé)?
Přehled funkcí knihovna ctype.h isspace(znak) Jde o bílý znak (mezeru, tabulátor, nový řádek, návrat vozíku, vertikální tabulátor, nová stránka)? isupper(znak) Je znak velké písmeno? islower(znak) Je znak malé písmeno?
Přehled funkcí knihovna ctype.h Převod znaků - z malých písmen na velká nebo naopak (jen jediný znak!) toupper(znak) Je-li znak malé písmeno, je výsledek odpovídající písmeno velké, jinak je vrácen znak původní. tolower(znak) Je-li znak velké písmeno, je výsledek odpovídající písmeno malé, jinak je vrácen znak původní.
Zdroje BERAN, Martin. Učebnice Borland C: učebnice programování v Borland C 4. generace. Praha: BEN - technická literatura, 1995, 442 s. ISBN 80-238-0304-2. HEROUT, Pavel. Učebnice jazyka C. 3. vyd. České Budějovice: Kopp, 1994, 269 s. ISBN 80-858-2821-9. HEROUT, Pavel. Učebnice jazyka C: 2. díl. 1. vyd. České Budějovice: KOPP, 1995, 236 s. ISBN 80-858-2850-2. SCHILDT, Herbert. Nauč se sám C. Překlad Jiří Grée, Adéla Gréeová. Praha: SoftPress, 2001, 623 s. ISBN 80-864-9713-5.