Řetězce (1) Řetězec (string) je posloupnost znaků (hod-not typu char)

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Standardní knihovní funkce pro práci s textovými řetězci
VISUAL BASIC Práce s řetězci Použitá literatura: Kvoch: Visual Basic 4.
Programování v C jazyku - SEMINÁŘ
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Programovací jazyk C++
Programování funkcí v Excelu
Programování 2 Cvičení 5.
Opakování Co je výsledkem následujícího prográmku? my $a="kol"; my $b="o"; $a.= $b; $b.= $a; print "a = $a, b = $b\n"; Vkládání speciálních znaků? Uvozovací.
VISUAL BASIC Práce se soubory.
Semestrální práce KIV/PT Martin Kales Hana Hůlová.
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
Programování v C++ Cvičení.
Programování v Pascalu Přednáška 7
Práce se soubory. * soubory patří k základním datovým prvkům v počítači * převážná většina programovacích jazyků má podporu určité formy práce se soubory.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
C# - znakové typy a řetězce
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Jednoduché datové typy
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Datové typy a práce s nimi
Současný svět Projekt č. CZ /3. 1
Počítače a programování 1 8.přednáška. Obsah přednášky Řetězce - deklarace a vytvoření Základní metody pro práci s řetezci Znaky - třída Character Základní.
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Knihovna GLib ● Multiplatformní nástavba standardní C knihovny (běží na Windows, Linux, Mac,...) ● Naleznete zde nástroje pro komfortní práci s řetězci.
Gymnázium prof. Jana Patočky Jindřišská Praha 1 „Praha & EU: Investujeme do vaší.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
KIV/PPA1 cvičení 9 Cvičící: Pavel Bžoch. Osnova cvičení Třída String a její metody –Řetězce a operace s nimi.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Datové typy a operátory. Co jsou datové typy  Charakterizují proměnnou nebo konstantu – jaká data obsahuje  Data jsou v počítači ukládána jako skupiny.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Řetězce String. Co je to řetězec Jako řetězec označujeme pojmenovanou skupinu libovolných znaků Deklarujeme jej pomocí příkazu Délka řetězce není v tomto.
25/04/20151 Znakový typ (1) Používán pro reprezentaci konečné uspořá- dané množiny znaků, které umí: –vstupní zařízení akceptovat –výstupní zařízení publikovat.
Pokročilé datové typy (struktury, unie, dynamické proměnné)
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Programovací jazyk C# 2. část. Datové typy C# rozeznává dva druhy datových typů, hodnotové a referenční. Hodnotové datové typy Proměnné hodnotového datového.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Úvod do Pythonu – IO operace se soubory.
Výukový materiál zpracován v rámci projektu
Vstupní a výstupní operace (1)
Úvod do programování 6. hodina
Vzorové řešení zápočtového testu
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Programování v jazyce C++
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Řetězce (24) Funkce strchr: deklarována v: string.h
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Oblast platnosti identifikátoru (1)
Typ pole (1) Proměnná typu pole představuje kolekci proměnných stejného datového typu, které mohou být označovány společným jménem (identifikátorem) Pole.
Typ ukazatel (1) Proměnné typu ukazatel (pointer) uchovávají paměťovou adresu Hodnota ukazatele říká, kde (na jaké adrese) se v paměti nachází nějaký objekt.
Proměnné (1) Proměnná: Definice proměnných:
Vstupní a výstupní operace (1)
Algoritmizace a datové struktury (14ASD)
Řetězce (1) Řetězec (string) je posloupnost znaků (hod-not typu char)
Transkript prezentace:

Řetězce (1) Řetězec (string) je posloupnost znaků (hod-not typu char) Může obsahovat: mezery znaky národních abeced řídící posloupnosti (uvozené znakem \) V jazyce C se řetězce uzavírají do uvozovek Jazyk C nemá žádný speciální datový typ pro přímé uložení řetězce 03/01/2019

Řetězce (2) Pro práci s řetězci se používá jednorozměr-né pole, jehož prvky jsou hodnoty typu char Každý řetězec je ukončen tzv. nulovým zna-kem – znak ’\0’(null-terminated string) Z toho vyplývá: podle nulového znaku je možné rozpoznat dél-ku celého řetězce může mít „libovolnou“ délku – omezenou veli-kostí paměti 03/01/2019

Řetězce (3) informace uložené za znakem ’\0’ jsou při standardním zpracování řetězců nedostupné (práce s řetězcem končí standardně dosažením prvního znaku ’\0’) pole určené pro uložení řetězce musí být o je-den byte delší (byte pro znak ’\0’) než je po-čet znaků v řetězci Poznámka: řetězcový literál (řetězcová konstanta) je zna-kem ’\0’ ukončen automaticky překladačem 03/01/2019

Řetězce (4) Definice pole pro uložení řetězce (tzv. statický řetězec): char idPole[pocetZnaku]; definuje pole idPole: mající pocetZnaku prvků do něhož je možné uložit řetězec o maximální délce pocetZnaku–1 Příklad: char str[10]; definuje pole str, které může sloužit pro uložení řetězce, jenž obsahuje maximálně devět znaků 03/01/2019

Řetězce (5) Definice pole pro řetězec může být spojena i s jeho inicializací, např.: char str1[10] = ”Jazyk C”; definuje pole str1 s 10 prvky typu char, v němž je uložený řetězec ”Jazyk C” [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] str1: ’J’ ’a’ ’z’ ’y’ ’k’ ’ ’ ’C’ ’\0’ ? ? Je-li v době definice pole pro řetězec prove-dena i inicializace, pak je možné vynechat pocetZnaku 03/01/2019

Řetězce (6) Příklad: char str2[] = ”Program”; definuje pole str2 s osmi prvky typu char obsahující řetězec ”Program” [0] [1] [2] [3] [4] [5] [6] [7] str2: ’P’ ’r’ ’o’ ’g’ ’r’ ’a’ ’m’ ’\0’ K jednotlivým znakům řetězce je možné přistupovat pomocí indexu: např. str2[3] zpřístupní znak ’g’ 03/01/2019

Řetězce (7) S řetězci lze pracovat i pomocí ukazatelů Zápis: char *str3; definuje proměnnou str3 (tzv. dynamický řetězec), která bude ukazovat na hodnotu ty-pu char Pozor: definicí ukazatele nedojde k alokování paměťo-vého místa, do něhož bude řetězec uložen paměťové místo pro řetězec musí být následně dynamicky (v době běhu programu) alokováno pomocí funkce malloc 03/01/2019

Řetězce (8) Funkce malloc: deklarována v: stdlib.h prototyp: void *malloc(size_t size); funkce: alokuje v paměti místo o velikosti size bytů vrácená hodnota: ukazatel na začátek alokovaného paměťového místa v případě, že paměťové místo nelze alokovat, pak funkce malloc vrací hodnotu NULL size_t označuje celočíselný typ bez znaménka 03/01/2019

Řetězce (9) Alokovaná paměť by měla být (v okamžiku, kdy již není zapotřebí) uvolněna Funkce free: deklarována v: stdlib.h prototyp: void free(void *ptr); funkce: uvolňuje (dealokuje) dříve přidělenou oblast paměti, na kterou ukazuje ukazatel ptr vrácená hodnota: funkce free nevrací žádnou hodnotu 03/01/2019

Řetězce (10) Ukazatel na typ char, může být také při své definici inicializován adresou řetězcové konstanty: char *str4 = ”Retezec”; Překladač automaticky vyhradí (alokuje) pro řetězcovou konstantu místo v paměti a ukon-čí ji znakem ’\0’ Řetězce je možné zobrazovat pomocí: funkce puts 03/01/2019

Řetězce (11) funkce printf: jako specifikátor se používá s (formátovací značka %s) Hodnoty řetězců lze načítat ze standardního vstupu pomocí funkce scanf: používá se operace s (konverzní specifikace %s) čtení probíhá tak, že se přeskočí všechny prázd-né znaky (např. mezery, tabulátory) a načte se zadaný řetězec načítání je ukončeno prvním znakem mezera, tabulátor nebo nový řádek 03/01/2019

Řetězce (12) není možné načíst řetězec obsahující mezeru ne-bo tabulátor vzniká riziko, že zadaný řetězec bude větší (del-ší) než je paměťové místo, které pro něj bylo vy-hrazeno: načítání bývá vhodné omezit pomocí části šířka uve-dené v konverzní specifikaci např.: char retezec[10]; scanf(”%9s”,retezec); načte maximálně 9 znaků a zajistí tak, že při zadání delšího řetězce nedojde k přepisování nepřidělené paměti 03/01/2019

Řetězce (13) vzhledem k tomu, že proměnná typu řetězec sa-ma o sobě obsahuje adresu, tak se při načítání pomocí funkce scanf před ní nezapisuje refe-renční operátor & Poznámka: řetězci, který je definován jako pole nelze přiřa-dit konstantu, tj. např. zápis: char str[10]; str = ”učebnice”; je chybný Při práci s řetězci lze také využívat následu-jící standardní knihovní funkce: 03/01/2019

Řetězce (14) Funkce gets: deklarována v: stdio.h prototyp: char *gets(char *str); funkce: načítá znaky ze standardního vstupu do řetězce str načítání je ukončeno znakem nový řádek  lze načíst řetězec obsahující mezeru nebo tabulátor načtený řetězec je automaticky ukončen znakem ’\0’ vrácená hodnota: jestliže při načítání nedojde k chybě, pak vrací hodnotu parametru str v případě chyby vrací hodnotu NULL 03/01/2019

Řetězce (15) Funkce fgets: poznámka: deklarována v: stdio.h použití funkce gets může být nebezpečné, protože délka načtených dat může být větší než velikost paměti vyhrazené pro uložení řetězce doporučuje se raději používat funkci fgets, která do-voluje načítání omezit na specifikovaný počet znaků Funkce fgets: deklarována v: stdio.h prototyp: char *fgets(char *str, int n, FILE *stream); 03/01/2019

Řetězce (16) funkce: vrácená hodnota: načítá znaky ze vstupního proudu stream načítání probíhá dokud: se nedorazí na znak nového řádku se nedosáhne konce vstupního souboru nepřečte n-1 znaků, aniž by před tím byl konec souboru ne-bo znak nového řádku za přečtené znaky se přidá znak ’\0’ jestliže je čtení ukončeno znakem nového řádku, pak znak nového řádku je těsně před znakem ’\0’ vrácená hodnota: při úspěšném ukončení vrací hodnotu parametru str 03/01/2019

Řetězce (17) je-li dosažen konec souboru před načtením jakéhokoliv znaku, pak funkce vrací hodnotu NULL a obsah para-metru str se nezmění jestliže při čtení dojde k chybě, pak funkce fgets vrací také hodnotu NULL a obsah parametru str není definovaný poznámka: pro načítání ze standardního vstupu se jako parametr pro vstupní proud používá stdin 03/01/2019

Řetězce (18) Funkce strlen: deklarována v: string.h prototyp: size_t strlen(const char *str); funkce: určuje délku řetězce, na nějž ukazuje parametr str vrácená hodnota: délka řetězce počet znaků od začátku řetězce str až ke znaku ’\0’ (znak ’\0’ se do výsledné délky už nezapočítává) 03/01/2019

Řetězce (19) Funkce strcpy: deklarována v: string.h prototyp: char *strcpy(char *dest, const char *source); funkce: kopíruje obsah řetězce source do řetězce dest (včetně znaku ’\0’) původní obsah řetězce dest je přepsán vrácená hodnota hodnota: funkce vrací hodnotu dest 03/01/2019

Řetězce (20) Funkce strcat: deklarována v: string.h prototyp: char *strcat(char *dest, const char *source); funkce: připojí obsah řetězce source (včetně znaku ’\0’) na konec řetězce dest znak ’\0’ u řetězce dest je přepsán prvním znakem řetězce source vrácená hodnota hodnota: funkce vrací hodnotu dest 03/01/2019

Řetězce (21) Funkce strcmp: deklarována v: string.h prototyp: int strcmp(const char *str1, const char *str2); funkce: lexikograficky (ve smyslu kódu ASCII) porovnává řetězec str1 a řetězec str2 vrácená hodnota hodnota: =0 v případě, že řetězce str1 a str2 jsou shodné <0 jestliže str1 je menší než str2 >0 pokud str1 je větší než str2 03/01/2019

Řetězce (22) Poznámka: v hlavičkovém souboru string.h jsou dek-larovány také funkce strncpy, strncat a strncmp jedná se o funkce, které nemusí pracovat s celým řetězcem, ale pouze se zadaným počtem jeho prv-ních znaků zmíněné funkce mají navíc formální parametr, po-mocí něhož se předává maximální počet zpraco-vávaných znaků tyto funkce zpracovávají řetězec do: určené délky – je-li řetězec delší než požadovaná délka zpracování 03/01/2019

Řetězce (23) jejich prototypy jsou: do ukončovacího znaku ’\0’ – je-li řetězec kratší než požadovaná délka zpracování jejich prototypy jsou: char *strncpy(char *dest, const char *source, size_t n); char *strncat(char *dest, const char *source, size_t n); int strncmp(const char *str1, const char *str2, size_t n); 03/01/2019

Řetězce (24) Funkce strchr: deklarována v: string.h prototyp: char *strchr(const char *str, int c); funkce: hledá první výskyt znaku c (převedeného na typ char) v řetězci str vrácená hodnota hodnota: ukazatel na nalezený znak jestliže se znak c v řetězci str nevyskytuje, pak funkce vrací hodnotu NULL 03/01/2019

Řetězce (25) Funkce strrchr: deklarována v: string.h prototyp: char *strrchr(const char *str, int c); funkce: hledá poslední výskyt znaku c (převedeného na typ char) v řetězci str vrácená hodnota hodnota: ukazatel na nalezený znak jestliže se znak c v řetězci str nevyskytuje, pak funkce vrací hodnotu NULL 03/01/2019

Řetězce (26) Funkce strstr: deklarována v: string.h prototyp: char *strstr(const char *str, const char *substr); funkce: hledá první výskyt podřetězce substr v řetězci str vrácená hodnota hodnota: ukazatel na začátek prvního výskytu podřetězce substr v řetězci str jestliže se řetězec substr v řetězci str nevyskytuje, pak funkce vrací hodnotu NULL 03/01/2019

Řetězce (27) Funkce strtod: deklarována v: stdlib.h prototyp: double strtod(const char *str, char **ptr); funkce: převádí počáteční část řetězce str na číselnou hodnotu typu double funkce strtod očekává, že převáděné číslo se skládá z následujících částí: případné prázdné znaky (např. mezery), které funkce strtod přeskočí případné znaménko plus nebo mínus (+ nebo –) 03/01/2019

Řetězce (28) vrácená hodnota hodnota: v případě úspěšného převodu: posloupnost desítkových číslic, která může obsahovat jeden oddělovač desetinné části (typicky desetinná tečka) případná exponentová část, která se skládá z písmene e nebo E, případného znaménka a posloupnosti desítkových číslic vrácená hodnota hodnota: v případě úspěšného převodu: vrací převedenou číselnou hodnotu (typu double) jestliže parametr ptr nemá v době volaní hodnotu NULL, pak je funkcí nastaven tak, aby ukazoval na první znak v str, kte-rý bezprostředně následuje za převedenou částí řetězce v případě, kdy řetězec není možné převést (jeho začátek neodpovídá očekávanému číselnému modelu): vrací hodnotu 0 proměnná errno se nastaví na hodnotu ERANGE jestliže parametr ptr nemá hodnotu NULL, pak funkce nastaví *ptr na hodnotu str 03/01/2019

Řetězce (29) Funkce strtol: deklarována v: stdlib.h prototyp: long int strtol(const char *str, char **ptr, int base); funkce: převádí počáteční část řetězce str na číselnou hodnotu typu long int funkce strtol očekává, že převáděné číslo se skládá z následujících částí: případné prázdné znaky (např. mezery), které funkce strtol přeskočí 03/01/2019

Řetězce (30) vrácená hodnota hodnota: případné znaménko plus nebo mínus (+ nebo –) posloupnost číslic v číselné soustavě o základu base je-li base=0, pak se předpokládá soustava: desítková – číslo musí začínat nenulovou desítkovou číslicí osmičková – číslo musí začínat nulou šestnáctková – číslo musí začínat 0x nebo 0X má-li base hodnotu v rozmezí 2 až 36, pak: se očekává, že řetězec str obsahuje číslice dané soustavy při base=16 není nutné, aby číslo začínalo 0x nebo 0X vrácená hodnota hodnota: v případě úspěšného převodu: vrací převedenou číselnou hodnotu (typu long int) jestliže parametr ptr nemá v době volaní hodnotu NULL, pak je funkcí nastaven tak, aby ukazoval na první znak v str, kte-rý bezprostředně následuje za převedenou částí řetězce 03/01/2019

Řetězce (31) Funkce strtoul: deklarována v: stdlib.h v případě, kdy řetězec není možné převést (jeho začátek neodpovídá očekávanému číselnému modelu): vrací hodnotu 0 proměnná errno se nastaví na hodnotu ERANGE jestliže parametr ptr nemá hodnotu NULL, pak funkce nastaví *ptr na hodnotu str Funkce strtoul: deklarována v: stdlib.h prototyp: unsigned long int strtoul (const char *str, char **ptr, int base); 03/01/2019

Řetězce (32) Funkce sprintf: funkce: deklarována v: stdio.h pracuje podobně jako funkce strtol počáteční část řetězce specifikovaného parametrem str je převáděna na hodnotu typu unsigned long int Funkce sprintf: deklarována v: stdio.h prototyp: int sprintf(char *str, const char *format,…); pracuje podobně jako funkce printf 03/01/2019

Řetězce (33) pro parametr format platí stejná pravidla jako u fun-kce printf posloupnost dat specifikovaná parametrem format není vypisována na standardní výstup, ale je ukládána do řetězce str řetězec str je automaticky ukončen znakem ’\0’ je zapotřebí, aby pro řetězec str bylo vymezeno do-statečně velké paměťové místo (v opačném případě dojde k přepisování nepřidělené paměti) poznámka: funkci sprintf lze využít např. pro převod číselné hodnoty na řetězec 03/01/2019

Řetězce (34) Funkce sscanf: deklarována v: stdio.h prototyp: int sscanf(char *str, const char *format,…); funkce: pracuje podobně jako funkce scanf pro parametr format platí stejná pravidla jako u fun-kce scanf znaky nejsou načítány ze standardního vstupu, ale z ře-tězce str 03/01/2019