Práce s řetězci. IUJCE Přednáška č. 10. string.h. vrací: délku řetězce str (bez '\0')

Podobné dokumenty
Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

10 Práce s řetězci - pokračování

Základy programování (IZP)

IUJCE 07/08 Přednáška č. 6

Knihovní funkce jazyka C

- jak udělat konstantu long int: L long velka = 78L;

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Vstup a výstup datové proudy v C

Programování v jazyce C pro chemiky (C2160) 7. Ukazatele, Funkce pro práci s řetězci

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Popis funkcí a maker standardních knihoven

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

PB071 Programování v jazyce C Jaro 2015

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Programování v C++, 2. cvičení

1. test z PJC Jméno studenta: Pocet bodu: Varianta 37: příklad 5 (5 bodů)

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Základy programování (IZP)

Algoritmizace a programování

Zápis znakù pomocí výjimkových kódù

2. test z PJC Jméno studenta: Pocet bodu: Varianta 25: příklad 1 (5 bodů)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Př. další použití pointerů

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Základy programování 2 KMI/ZP2

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Operační systémy. Cvičení 3: Programování v C pod Unixem

Základy programování (IZP)

Jazyk C++, některá rozšíření oproti C

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <->

Algoritmizace a programování

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

- tzv. standardní vstupní a výstupní proud (input / output stream)

Pole, ukazatel, textový řetězec, vstup a výstup programu

Programování v jazyce JavaScript

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Formátové specifikace formátovací řetězce

Zápis programu v jazyce C#

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

Řetězce. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Lekce 19 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Standardní vstup a výstup

Práce s pamětí a předávání parametrů. Úvod do programování 1

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Více o konstruktorech a destruktorech

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Operační systémy. Cvičení 4: Programování v C pod Unixem

IUJCE 07/08 Přednáška č. 1

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

Programovanie v jazyku C - funkcie a makra

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

PB071 Programování v jazyce C

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;

11a Dynamické dvourozměrné pole (obdobně vícerozměrné)

Mělká a hluboká kopie

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Programovací jazyk C++ Hodina 1

Úvod do programování 6. hodina

ZÁKLADY PROGRAMOVÁNÍ V C

KTE / ZPE Informační technologie

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

Algoritmizace a programování

11b Další příklady operací vstupu a výstupu (úvod viz 10)

Základy programování (IZP)

Programování v jazyce C pro chemiky (C2160) 8. Načítání a zápis PDB souboru

Výrazy, operace, příkazy

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Funkce, intuitivní chápání složitosti

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Data, výrazy, příkazy

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Algoritmizace a programování

Paměť počítače. alg2 1

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Transkript:

Práce s řetězci string.h size_t strlen(const char *str); délku řetězce str (bez '\0') int strcmp(const char *str1, const char *str2); porovná řetězce o <0: str1 je lexikograficky menší než str2 o 0: řetězce jsou lexikograficky identické o >0: str1 je lexikograficky větší než str2 char *strcpy(char *strdest, const char *strsource); zkopíruje strsource do strdest o úspěch: pointer na strdest o neúspěch: nic pozor na délku strdestination char *strcat(char *strdestination, const char *strsource); char *strncat(char *strdest, const char *source, size_t count); připojí strsource k strdestination ('\0' cílového řetězce přepsána 1. znakem zdroje) o úspěch: pointer na strdestination o neúspěch: nic strncat() pouze count znaků char *strchr(const char *str, int c); char *strrchr(const char *str, int c); hledá výskyt znaku c v řetězci str (strrchr() o znak nalezen: pointer na první výskyt znaku o znak nenalezen: NULL od konce) char *strstr(const char *str, const char *strsearch); hledá výskyt řetězce strsearch v řetězci str o řetězce nalezen: pointer na první výskyt znaku o řetězce nenalezen: NULL o prázdný str: pointer na str 1

Formátovaný vstup / výstup z řetězce int sprintf(char *str, const char *format,...); int snprintf(char *str, size_t size, const char *format,...); = printf() do řetězce str int sscanf( const char *str, const char *format,...); Závěrečné poznámky o = scanf() z řetězce str. velmi mnoho dalších funkcí viz MSDN bezpečné varianty (jen Microsoft CRT library ve VS2005 a novější) o jména ve tvaru xxx_s o není dle ANSI C!!! Převody řetězec číslo int atoi(const char *str); long atol(const char *str); double atof(const char *str); převedou str na číslo úspěch: číslo, konverzi nelze provést: nedefinováno (obvykle 0, 0.0) jen kvůli kompatibilitě s UNIX, v ANSI C lepší viz dále double strtod(const char *str, char **endptr); převede str na číslo, nastaví endptr na první pozici za převedené číslo (znak, který nelze převést na číslo v dané soustavě) číslo ve formátu [whitespace] [{+ }] [0 [{ x X }]] [digits] případné mezery na začátku přeskočí long strtol(const char *str, char **endptr, int base); unsigned long strtoul(const char *str, char **endptr, int base); base je základ soustavy 2; 36 příklady char *endofs; double x; " a nejaky text" int i; x = strtod(" 1.2345 a nejaky text", &endofs); i = strtol("0x12", &endofs, 0); // autodetekce zakladu i = strtol("10", &endofs, 16); // zaklad rucne Práce s pamětí I memory h nebo string.h 2

int memcmp(const void *s1, const void *s2, size_t n); Porovná prvních n bajtů polí (blok mem) s1 a s2. Vrací o 0 = bloky stejné o > 0, když s1 > s2 o < 0, když s1 < s2. void *memcpy(void *dest, const void *src, size_t n); Zkopíruje n bajtů z bloku paměti src do dest. Bloky se nesmějí překrývat. void *memmove(void *dest, const void *src, size_t n); Zkopíruje n bajtů z bloku paměti src do dest. Bloky se smějí překrývat void *memset(void *s, int c, size_t n); Vyplní blok paměti s o délce n bajtů hodnotou c. Vrací ukazatel s. Práce s pamětí II void *calloc(size_t nmemb, size_t size); void *malloc(size_t size); void free(void *ptr); void *realloc(void *ptr, size_t size); Spolupráce s OS funkce void abort(void); abnormální ukončení programu. void exit(int status); ukončí program kdekoliv v programu program vrací hodnotu status. int atexit(void (* function)(void)); Přiřadí funkci do seznamu funkcí, které jsou volány při ukončení programu funkcí exit nebo skončením main(). function = ukazatel na ukončující funkci. Registrované jsou volány v opačném pořadí než jsou registrovány. vrací 0 = úspěch, -1 = chyba. int system (const char *string); 3

Spustí příkazový interpret a předá mu řetězec string. např. system("pause"); system("format c:"); system("mujprogram.exe") Makra EXIT_FAILURE EXIT_SUCCESS NULL hodnota argumentu funkce exit pro neúspěšné ukončení programu. (nenulová hodnota) hodnota argumentu funkce exit pro úspěšné ukončení programu. (nulová hodnota) nulový ukazatel. Generování náhodných čísel RAND_MAX makro největší hodnota generovaná rand() void srand(unsigned int seed); Inicializuje generátor pseudonáhodných čísel. obvyklé použití #include <time.h> srand( (unsigned)time( NULL ) ) int rand(void); Vrací pseudonáhodná čísla s rovnoměrným rozložením mezi 0 a RAND_MAX (min. 32767) bez inicializace vrací stále stejnou posloupnost Řazení a vyhledávání void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); řazení algoritmem quicksort pole libovolného typu, na které ukazuje base o nmemb položkách velikosti size. compar = pointer na porovnávací funkci, musí vracet o < 0 pokud (první arg < druhý arg) o < 0 pokud (první arg == druhý arg) o > 0 pokud (první arg > druhý arg) binární vyhledávání void *bsearch(const void *key, const void *base, size_t num, size_t width, int (*compare) (const void *, const void *)); 4

o ve vzestupně setříděném poli base (počet prvků num a velikost jednoho width) hledá výskyt hodnoty key o compare viz. qsort() o nalezeno pointer na nalezený prvek nenalezeno NULL o nesetříděné pole nepředvídatelné chování Příklad setřiďte vzestupně pole čísel typu int #include <stdio.h> #include <> #define N 6 int porovnej(const int *prvni, const int *druhy) { if ((*druhy - *prvni) < 0) return 1; else if ((*druhy - *prvni) > 0) return -1; else return 0; } int main(void) { int pole[n] = {10,-5,20,31,8,88}; qsort((void *)pole, N, sizeof(pole[0]), porovnej); return 0; } o lze také (int (*)(const void*, const void*)) porovnej Práce se znaky ctype.h makra pro určení typu znaku o parametr char c např. o vrací int ve smyslu true /false isalnum() je číslice nebo písmeno isalpha() je písmeno isascii() je ASCII (0-127) iscntrl() je ctrl znak (1-26) isdigit() je číslice islower() je malé písmeno isprint() je tisknutelný znak (32 126) ispunct() je interpunkční znak isspace() je bílý znak isupper() je velké písmeno isxdigit() je znak do hexa číslice (0-9. A-F, a-f) isgraph() je viditelný znak (33 126) makra pro konverze znaků vrací konvertovaný znak 5

tolower() toupper() toascii() na malé písmeno (jen velká, ostatních si nevšímá) na velké písmeno (jen malá, ostatních si nevšímá) princip použití: char c; printf("zadej znak: "); scanf("%c", &c); if (islower(c)) { printf("znak je maly, konverze na velky\n"); c = (char)toupper(c); } 6