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.

Slides:



Advertisements
Podobné prezentace
Základy ukládání dat v počítači
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.
Vstup a výstup Ing. Lumír Návrat  katedra informatiky, A-1018 
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Přednáška 11 Jiří Šebesta
Základní pojmy v jazyce C
VISUAL BASIC Práce se soubory.
Aplikační a programové vybavení
Pole, ukazatele a odkazy
Algoritmy I Cvičení č. 2. Cíl hodiny Datové typy a přetypování (int, float, double, bool, char, long, short) Konstanty – Celočíselné Desítkové – 15, 0,
Preprocess Úvod do tvorby funkcí Princip preprocesoringu Direktivy preprocesoru Podmíněný překlad Základy tvorby funkcí Zjednodušený popis principu předávaní.
Programování v C++ Cvičení.
Algoritmizace a programování
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
Příklady z Matlabu 4 Příklady na řídící příkazy , IF , SWITCH , FOR , WHILE , příkazy vstupu a výstupu INPUT a DISP.
MATLAB® ( část 3 - scripty).
Informatika pro ekonomy II přednáška 4
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
Počítače a programování 1 pro obor EST BPC1E PŘEDNÁŠKA 3
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Cvičení.
Radim Farana Podklady pro výuku
Vstupy a výstupy znaků a) Terminálový vstup a výstup ( getchar(), putchar() ) Přečtěte znak pomocí systémové funkce getchar() a vypište ho pomocí putchar().
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Datové typy a struktury
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Příklady v jazyku C – část 4
Příklady v jazyku C – část 3
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Spojové struktury BI-PA1 Programování a algoritmizace 1, ZS
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Příklady v jazyku C – část 2
Aplikační a programové vybavení
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.
Napište program v C pro výpočet plochy obdélníka se stranami A=3 a B=2. Výsledek vytiskněte s patřičným komentářem na obrazovku formátovým příkazem printf.
OSNOVA: a) Úvod a klasifikace b) Funkce main() s argumenty c) Souborový vstup a výstup d) Programování WAV Jiří Šebesta Ústav radioelektroniky, FEKT VUT.
OSNOVA: a) Příkazy pro cykly II. b) Příkazy pro řízení přenosu c) Příkazy – příklad d) Řetězce v C e) Funkce “stdio.h“ pro řetězce f) Funkce “string.h“
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Realloc a qsort examples BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
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.
C – jak na procedury Mgr. Lenka Švancarová. C – procedury #include int main() { printf("Ahoj\n"); return(0); } #include void pozdrav(void) { printf("Ahoj\n");
OSNOVA: a) Algoritmy třídění b) Třídění dynamických záznamů Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST.
Příklady v jazyku C – část 1. Výstupy pomocí printf. printf(" Tisk textu \n v apostrofech \n ") ; p=10; printf("%d\n", p) ; /* tisk konstanty */ printf("Tisk.
Příklady v jazyku C – část 8. Napište program, který inicializuje 2-rozměrné pole uživatele (5 řádků, 2 sloupce) a naplní ho hodnotami (první sloupec.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
OSNOVA: a) Ukazatel b) Pole a ukazatel c) Pole ukazatelů d) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro.
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é.
Příklady v jazyku C – část 2
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Příklady v jazyku C – část 2
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Algoritmizace a programování Cykly - For. FOR Předem známe počet opakování Předem známe počet opakování Syntaxe: Syntaxe: for proměnná in range(rozpětí):
Počítače a programování 2
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Textové vstupy UIS Jiří Rybička
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í
Řetězce (24) Funkce strchr: deklarována v: string.h
Opakování ze 3. cvičení deklarace proměnných výpis na monitor (výstup)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

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 a programování 1 pro obor EST BPC1E PŘEDNÁŠKA 5

Řetězce v C (1/9) Řetězec: pole znaků (v paměti: 1 byte/znak – kód ASCII) zakončený terminátorem null (ASCII hodnota 0) ASCII kódy znaků v rozsahu 0 až 127, tj. hexadecimálně 0x00 až 0x7F, celosvětově standardizované ASCII kódy znaků v rozashu 128 až 255 ( unsigned ) nebo záporné ( signed ) závislé na aktuálně nastavené znakové sadě (národní znaky apod. UTF-8, Windows-1250, ISO-8859-x) – tzv. Extended ASCII Znaky pro číslice mají ASCII kódy 48 až 57, tj. hexadecimálně 0x30 až 0x39, postup pro vygenerování znaku: char ch; int num=5; ch = num|0x30; //or ch = num+0x30; printf("%d %c", ch, ch);

Řetězce v C (2/9) písmena velké anglické abecedy jsou uspořádaně od kódu 65, hexadecimálně 0x41 písmena malé anglické abecedy jsou uspořádaně od kódu 97, hexadecimálně 0x61 (rozdíl vůči stejným velkým písmenům je 32 nebo-li hexadecimálně 0x20)

int main(void) { unsigned char c; printf("Actual character set: \n\n"); for(c=32; c =32; c++) printf("ASCII code %d = character %c\n", c, c); scanf("%c", &c); return 0; } Př. Tisk všech tisknutelných znaků včetně Extended ASCII Řetězce v C (3/9) Extended znaky jsou dány nastavením OS (Win), std. UTF-8 Kombinované omezení v podmínce cyklu je nutné, kvůli přete- čení proměnné c přes maximum rozsahu unsigned char (255)

Výpis na obrazovku: Příklad: BPC1E_Ex28.c Řetězce v C (4/9)

Způsoby deklarace: char strA[5] = {’A’,’B’,’C’,’D’,’\0’}; – 4 znaky + znak null char strB[5] = "ABCD"; – 4 znaky, znak null vložen automaticky - na stejném principu se definuje řetězec v parametru printf() – počet prvků nemusí být uveden, kompilátor sám dopočítá char *strC = "ABCD"; - ukazatel na první znak, první znak ukazuje na následující, atd. až do null (nedoporučeno – možné kolize v paměti) Řetězce v C (5/9)

char S[7], T[7], c; char R[7]="ABCDEF"; int n; for(n=0; n first, R[n] != ’\0’ S[5-n] = R[n]; //or S[5-n] = *(R+n); S[6]='\0'; // S[n] = '\0' printf("%s\n", S); for(n=0; n small T[n] = R[n]+32; //or *(T+n) = *(R+n)+32; T[n]='\0'; printf("%s\n", T); Př. Převrácení textu a záměna velkých písmen za malá Řetězce v C (6/9) Příklad: BPC1E_Ex29.c

Př. Aritmetická manipulace se znaky - nad znaky lze provádět libovolné matematické a logické operace, přičemž pracujeme s jejich ASCII hodnotami { char text[]={92, 135, … 57, 100, 34, 0}; unsigned int n; printf("Input: %s\n", text); for(n=0; text[n]!='\0'; n++)// all chars in string if(n%5!=0) text[n]+=text[n-1]-102; else text[n]=160-text[n]; printf("Output: %s\n", text); return 0; } Řetězce v C (7/9) Příklad: BPC1E_Ex30.c

Př. Řetězec překódovaný do desítkového vyjádření ASCII kódů int main() { char texti[21]="Hello world!\n"; char textc[61]; char textd[21]; unsigned int n, m, p; printf("%s\n\n", texti); for(n=0, m=0; texti[n]!='\0'; n++) { p=texti[n]/100; textc[m++]=p+'0'; textc[m++]=texti[n]/10-p*10+'0'; textc[m++]=texti[n]%10+'0'; } textc[m]='\0'; printf("%s\n\n", textc); Řetězce v C (8/9)

a dekódování zpět for(n=0, m=0; textc[n]!='\0'; n++) { textd[m]=(textc[n++]-'0')*100; textd[m]+=(textc[n++]-'0')*10; textd[m++]+=textc[n]-'0'; } textd[m]='\0'; printf("%s\n", textd); return 0; } Řetězce v C (9/9) Příklad: BPC1E_Ex31.c Výstup:

Funkce pro řetězce (1/3) Funkce stdio.h pro řetězce (1/3) int main(void) { char c; puts("Is C language easy?"); // unformated printing of string to stdout followed by new line c=getchar(); // get char.from the standard input if (c=='y') puts("Right,..."); if (c=='n') puts("I disagree,..."); do c=getchar(); while(c!=' ');// wait for space return 0; } Funkce neformátovaného výstupu řetězce puts() a vstupu znaku getchar() Příklad: BPC1E_Ex32.c

int main(void) { char c; for(c='A'; c<='Z'; c++) // loop for all alphabet { putchar(c); // printing character to // the stdout - capital putchar(c+32); // small putchar('\n'); // new line } doc=getchar(); while(c!=' '); // wait for space return 0; } Funkce pro výstup znaku putchar() Funkce pro řetězce (2/3) Funkce stdio.h pro řetězce (2/3) Příklad: BPC1E_Ex33.c

int main(void) { char fname[20], sname[20], c; printf("Insert your first name: "); gets(fname); // reading characters from stdin and // stores them as a string - first name printf("\nInsert your surname: "); gets(sname); // reading surname printf("\nYour whole name is: %s %s", fname, sname); scanf("%c", &c); return 0; } Funkce pro vstup neformátovaného řetězce gets() Funkce pro řetězce (3/3) Funkce stdio.h pro řetězce (3/3) Příklad: BPC1E_Ex34.c Funkce gets() automaticky vynechává znak ’\n’

#include #include //library for ops. with strings int main(void) { char s_inp[6]={'a','b','c','d','e','\0'}; // or char s_inp[6] = "abcde"; char s_out[6], c; strcpy(s_out, s_inp); //copying of string, not possible s_out = s_inp; printf("%s\n", s_out); scanf("%c", &c); return 0; } Funkce pro kopírování řetězců strcpy() Funkce pro řetězce (1/5) Funkce string.h pro řetězce (1/5) Příklad: BPC1E_Ex35.c

char S[20], T[20], c; char R[20]="ABCDEF"; int n; for(n=0; n first S[strlen(R)-n-1]=R[n]; S[n]='\0'; printf("%s\n", S); for(n=0; n small T[n]=R[n]+32; T[n]='\0'; printf("%s\n", T); Funkce pro určení délky řetězce (návratová hodnota) strlen() Příklad: BPC1E_Ex36.c Funkce pro řetězce (2/5) Funkce string.h pro řetězce (2/5)

char final[30]; char first[]="wine"; char second[]="women"; char third[]="songs"; strcpy(final, first); strcat(final, second); // appends a copy of the // source string to the destination string strcat(final, third); printf("%s\n", final); Funkce pro spojování řetězeců strcat() Funkce pro řetězce (3/5) Funkce string.h pro řetězce (3/5) Příklad: BPC1E_Ex37.c Modifikovaná funkce strncat(str1,str2,n) připojí řetězec str2 k řetězci str1, přičemž se použije jen prvních n znaků Znak null se vkládá automaticky na konec spojeného řetězce

char number [11], c; char *ptr, digit='8'; strcpy(number, " "); printf("Original string: %s\n", number); ptr=strchr(number, digit); while(ptr) { *ptr='x'; ptr=strchr(number, digit); } printf("Modified string: %s", number); Funkce pro vyhledání znaku v řetězci strchr() Funkce pro řetězce (4/5) Funkce string.h pro řetězce (4/5) Náhrada všech znaků 8 v řetězci za znak x : Příklad: BPC1E_Ex38.c

char txt1[51], txt2[5], txt3[5]="----", *ptr; int n; printf("Insert text1: "); gets(txt1); printf("Insert text2 (searched): "); gets(txt2); n=strlen(txt2); ptr=strstr(txt1, txt2); while(ptr) { strncpy(ptr,txt3,n); ptr=strstr(txt1, txt2); } printf("Modified string: %s", txt1); Funkce pro vyhledání řetězce v řetězci strstr() a kopíro- vání n znaků řetězce strncpy() Funkce pro řetězce (5/5) Funkce string.h pro řetězce (5/5) Příklad: BPC1E_Ex39.c

Řetězce – příklady (1/2) Př. Řetězec num obsahuje neznámý počet celých a desetinných čísel. Každé číslo je ukončeno středníkem. Spočítejte, kolik je zapsáno v řetězci čísel a kolik z nich je čísel celých. char num[30]="12;3.8;100;94.5;33;44;"; int n, total=0, rat=0; printf("Numbers: %s\n\n", num); for(n=0; n<strlen(num); n++) { if(num[n]==';') // total number of num. total++; if(num[n]=='.') // number of rational n. rat++; } printf("Total number of num.: %4d\n", total); printf("Integer numbers: %4d\n", total-rat); Příklad: BPC1E_Ex40.c

Př. Řetězec num obsahuje neznámý počet celých čísel. Každé číslo je ukončeno středníkem. Čísla vypište do sloupce pod sebe a zarovnejte je. char num[30]="12;4;100;95;33;44;", part[10]; int m=0, n; printf("Numbers: %s\n\n", num); for(n=0; n<strlen(num); n++) if(num[n]!=';') part[m++]=num[n]; else { part[m]='\0'; printf("%6s\n", part); m=0; } Řetězce – příklady (2/2) Příklad: BPC1E_Ex41.c

Téma následující přednášky DĚKUJI ZA POZORNOST – Ukazatel a adresace paměti – Pole a ukazatelé – Pole ukazatelů – Příklady