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

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

Upload: mayda

Post on 21-Jan-2016

43 views

Category:

Documents


0 download

DESCRIPTION

Verze 2009.01. Standardní knihovní funkce pro práci s textovými řetězci. 11. A1PRG - Programování – Seminář Ing. Michal [email protected]. 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 - PowerPoint PPT Presentation

TRANSCRIPT

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

A1PRG - Programování – Seminář

Ing. Michal Heczko [email protected]

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

Verze 2009.01

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

Agenda

Znak Řetězec Definice řetězce Práce s řetězci – vstup a výstup Funkce pro práci s řetězci

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

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´;

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

Ř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í.

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

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

0 1 2 3 4 5 6 7

T E X T \0

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

Řetězec

Definice řetězce Statická

Bez inicializacechar retezec[10]; S inicializacíchar retezec1[10] = ″text″;

char retezec2[] = ″text″; Dynamickáchar *retezec;

retezec = (char *) malloc(10);

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

Ř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″);

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

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()

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

Práce s řetězcem

Výpis řetězce na terminál:printf(″%s″,retezec);

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

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;

}

...

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

Práce s řetězcem

Příklad:...

printf(″Zadejte sve jmeno: ″);

scanf(″%s″, jmeno);

printf(″Vase jmeno je %s″, jmeno);

free(jmeno);

return 0;

}

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

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’;

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

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

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

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″);

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

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″);

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

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

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

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

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

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ší.

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

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);

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

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);

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

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);

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

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);

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

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);

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

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.

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

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

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

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.

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

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

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

A1PRG-s 11. Řetězce

Děkuji za pozornost

Ing. Michal Heczko

[email protected]

218/U3

Prezentace k dispozici na http://vyuka.fai.utb.cz