vod do jazyka C Reazce Reazec je pecilny

  • Slides: 29
Download presentation
Úvod do jazyka C

Úvod do jazyka C

Reťazce Reťazec je špeciálny typ jednorozmerného poľa. Je zložený z prvkov typu char. Definícia

Reťazce Reťazec je špeciálny typ jednorozmerného poľa. Je zložený z prvkov typu char. Definícia reťazca char str[] = “Toto je retazec"; char str[50] = “Toto je retazec"; 2

Reťazec voľná pamäť index a h o j � 0 1 2 3 4

Reťazec voľná pamäť index a h o j 0 1 2 3 4 5 6 7 Reťazec je vždy ukončený znakom . Podľa tohto znaku sa pozná koniec reťazca a môže sa určiť jeho dĺžka. Pokiaľ zabudneme na koniec reťazca dať znak bude program považovať za reťazec všetko až do konca pamäte alebo nasledujúceho znaku . 3

Dĺžka reťazca je obmedzená len veľkosťou pamäte. Z pridelenej pamäte je ale využitá len

Dĺžka reťazca je obmedzená len veľkosťou pamäte. Z pridelenej pamäte je ale využitá len časť od začiatku až do prvého znaku . Zvyšná pridelená pamäť je nevyužitá. Pri alokování pamäte pre reťazec musíme pamätať aj na koncový znak – tzn. výsledný reťazec bude dlhší o jeden bajt 4

char str[50] = "Toto je retazec"; alokuje sa pole o 50 -ich byte-och a

char str[50] = "Toto je retazec"; alokuje sa pole o 50 -ich byte-och a naplní sa reťazcom char str[] = “retazec"; n prekladač automaticky alokuje miesto o 7. byte-och 0 1 2 3 4 5 6 7 r e t a z e c 5

Práca s reťazcami char meno[30]; char priezvisko[30]; scanf("%s", &meno); Program načíta meno a priezvisko

Práca s reťazcami char meno[30]; char priezvisko[30]; scanf("%s", &meno); Program načíta meno a priezvisko scanf("%s %s", &meno, &priezvisko); Program načíta meno a priezvisko 6

Práca s reťazcami char meno[50]=“Jan”, priezvisko[50]=“Novak”; printf("%s", meno); printf("%s %s", meno, priezvisko); Príkaz vytlačí

Práca s reťazcami char meno[50]=“Jan”, priezvisko[50]=“Novak”; printf("%s", meno); printf("%s %s", meno, priezvisko); Príkaz vytlačí všetky znaky reťazca, t. j. znaky mena, printf("%s", "abc"); Príkaz vytlačí všetky znaky reťazca, t. j. znaky abc, 7

Dôležité je uvedomiť si rozdiel medzi jedným znakom, napr. 'a' a reťazcom dĺžky 1,

Dôležité je uvedomiť si rozdiel medzi jedným znakom, napr. 'a' a reťazcom dĺžky 1, napr. "a", ktorý musí byť ukončený binárnou nulou a preto predstavuje pole znakov o dĺžke 2. 8

char pozdrav[] = "Ahoj"; char pozdrav[] = {'A', 'h', 'o', 'j', '�'}; sú ekvivalentné

char pozdrav[] = "Ahoj"; char pozdrav[] = {'A', 'h', 'o', 'j', ''}; sú ekvivalentné zápisy 9

Práca so znakmi reťazca – vybratie znaku char meno[]=“Peter”; char c; c=meno[2]; printf(“nr Treti

Práca so znakmi reťazca – vybratie znaku char meno[]=“Peter”; char c; c=meno[2]; printf(“nr Treti znak je: %c”, c); 10

Práca so znakmi reťazca – prepísanie znaku n Jednotlivé znaky sa adresujú indexom v

Práca so znakmi reťazca – prepísanie znaku n Jednotlivé znaky sa adresujú indexom v zátvorkách, napr. char meno[]=“Peter”; meno[3]=‘x’; printf(“nr Meno: %s”, meno); 11

Výpis po znakoch I. char meno[]=“Peter Novak”; int i; for(i=0; i<strlen(meno); i++) { printf(“nr

Výpis po znakoch I. char meno[]=“Peter Novak”; int i; for(i=0; i<strlen(meno); i++) { printf(“nr Znak %d: %c”, i, meno[i]); } 12

Výpis po znakoch II. char meno[]=“Peter Novak”; int i; for(i=0; i<4; i++) { printf(“nr

Výpis po znakoch II. char meno[]=“Peter Novak”; int i; for(i=0; i<4; i++) { printf(“nr Znak %d: %c”, i, meno[i]); } 13

Ako naplniť reťazec Čo robiť, ak už je deklarované pole a potrebujeme ho naplniť

Ako naplniť reťazec Čo robiť, ak už je deklarované pole a potrebujeme ho naplniť až neskôr? char text[10]; text = “Pavol"; Použijeme kopírovanie jedného reťazca do iného pomocou funkcií strcpy, strncpy a sprintf. 18

Na kopírovanie jedného retazca do iného slúži funkcia strcpy. Funkcia má dva parametre strcpy(meno,

Na kopírovanie jedného retazca do iného slúži funkcia strcpy. Funkcia má dva parametre strcpy(meno, “Peto"); strcpy(meno 2, meno 1); // mozne varianty strcpy( &meno 2, &meno 1); // lepsia verzia strcpy( (char*)&meno 2 , (char*)&meno 1); 20

Na kopírovanie jedného retazca do iného slúži funkcia strncpy. Funkcia má tri parametre char

Na kopírovanie jedného retazca do iného slúži funkcia strncpy. Funkcia má tri parametre char pole[9]; strncpy(pole, “Dlhy retazec", 9); pole[9] = ''; int dlzka=4; strncpy(pole, “Dlhy retazec", dlzka); pole[dlzka] = ''; 21

Kopírovanie jedného reťazca do druhého int main() { char text[10] = "Ahoj"; printf(“nr %s

Kopírovanie jedného reťazca do druhého int main() { char text[10] = "Ahoj"; printf(“nr %s ", text); strcpy(text, “Iny text"); printf(“nr %s", text); return 0; } 22

Kopírovanie jedného reťazca do druhého int main() { char text[100]; strncpy(text, “Toto je dlhy

Kopírovanie jedného reťazca do druhého int main() { char text[100]; strncpy(text, “Toto je dlhy text", 9); text[9] = ''; printf("%s n", text); return 0; } 23

Načítanie reťazca z klávesnice scanf(“%s”, &retazec); fgets(retazec, 9, stdin); // z klávesnice fgets(retazec, 9,

Načítanie reťazca z klávesnice scanf(“%s”, &retazec); fgets(retazec, 9, stdin); // z klávesnice fgets(retazec, 9, fp); // zo súboru Funkcia fgets prečíta jeden riadok z klávesnice alebo súboru určeného tretím parametrom Ak miesto súboru bude stdin, bude čítať z klávesnice a vloží ho do reťazca určeného prvým parametrom. Číslo v strede 24 hovorí, koľko maximálne znakov sa môže prečítať.

Štandardné funkcie prácu s reťazcami Knižnica string. h Dlžka reťazca dlzka=strlen(“text“); vráti hodnotu dĺžky

Štandardné funkcie prácu s reťazcami Knižnica string. h Dlžka reťazca dlzka=strlen(“text“); vráti hodnotu dĺžky reťazca bez znaku Kopírovanie reťazca strcpy(s 2, s 1); skopíruje obsah reťazca s 1 do s 2 Spojenie reťazcov strcat(s 2, s 1); pripojí s 1 k reťazcu s 2 Nájdenie znaku v reťazci strchr(s 1, ‘x’); keď sa znak x v reťazci vyskytuje vráti pointer na tento znak 25 inak hodnotu NULL

Štandardné funkcie prácu s reťazcami Porovnanie dvoch reťazcov strcmp(s 2, s 1); funkcia vráti

Štandardné funkcie prácu s reťazcami Porovnanie dvoch reťazcov strcmp(s 2, s 1); funkcia vráti 0 keď sú reťazce rovnaké, keď je s 1 menší kladné číslo a opačne. Nájdenie podreťazca v reťazci strstr(s 2, s 1); Nájde prvý výskyt reťazca s 1 v reťazci s 2 a vráti pointer na tento výskyt alebo vráti NULL v prípade neúspechu. Práca s reťazcami v opačnom poradí V C sú definované funkcie, ktoré vedia pracovať s reťazcami odzadu. Tieto funkcie sa podobajú príslušným základným funkciám s tým rozdielom, že pred názov sa vkladá písmeno r (reverse) 26

Funkcie, ktoré pracujú s reťazcami Funkcia strlen zistí dlžku retazca. Teda strlen("Ahoj") bude 4.

Funkcie, ktoré pracujú s reťazcami Funkcia strlen zistí dlžku retazca. Teda strlen("Ahoj") bude 4. Funkcia strcmp vie porovnať dva reťazce podľa abecedy. Ak je prvý menší, výsledok je záporné číslo, ak je väčší, kladné a ak sú reťazce rovnaké, výsledok je 0. strcmp("Adam", "Eva") je 4, 27

Štandardné funkcie prácu s reťazcami char cele_meno[40]; // tu bude spojene meno a priezvisko

Štandardné funkcie prácu s reťazcami char cele_meno[40]; // tu bude spojene meno a priezvisko char meno[]=“Peter”; char priezvisko[]=“Novak”; strcat(cele_meno, meno); strcat(cele_meno, priezvisko); printf(“nr Cele meno je: %s ”, cele_meno); 32

Štandardné funkcie prácu s reťazcami int rovnake; char meno 1[40], meno 2[40]; printf(“nr Zadaj

Štandardné funkcie prácu s reťazcami int rovnake; char meno 1[40], meno 2[40]; printf(“nr Zadaj 1. meno: ”); scanf(“%s”, meno 1); printf(“nr Zadaj 2. meno: ”); scanf(“%s”, meno 2); rovnake=strcmp(meno 1, meno 2); if(rovnake==0) printf(“nr Mena su rovnake”); else printf(“nr Mena su rozdielne”); 33

Prevod reťazcov na čísla V programe sa často potrebuje konvertovať číselnú hodnotu premennej na

Prevod reťazcov na čísla V programe sa často potrebuje konvertovať číselnú hodnotu premennej na odpovedajúci reťazec alebo naopak. V rámci vstupov funkcie scanf() a printf() konverziu vykonávajú automaticky. Funkcie pre konverziu sú v knižnici stdlib. h atoi(s 1) – int atol(s 1) – long atof(s 1) - double 34

Príklad konverzia reťazca #include <stdio. h> #include <stdlib. h> #include "moje. h" int main()

Príklad konverzia reťazca #include <stdio. h> #include <stdlib. h> #include "moje. h" int main() { int i; char s 1[] = "123"; i = atoi(s 1); //konverzia reťazca na číslo printf(“nr Retazec: %sn", s 1); //tlač reťazca printf(“nr Cislo: %d“, i); //tlač premennej i typu int } 35

Formátovaný zápis do reťazca Pre zápis do reťazca je možné použiť aj funkciu sprintf().

Formátovaný zápis do reťazca Pre zápis do reťazca je možné použiť aj funkciu sprintf(). V tomto prípade sú do reťazca uložené údaje, ktoré môžu byť neskôr vypísané: sprintf(ciel_retazec, “format_retazec“, argumenty) 36

Formátovaný zápis do reťazca Zápis dát do reťazca, ktorý môže byť neskôr ďalej využitý:

Formátovaný zápis do reťazca Zápis dát do reťazca, ktorý môže byť neskôr ďalej využitý: sprintf(s 1, “%d”, i); #include <stdio. h> int main() { int i = 5; char s 1[20]; sprintf(s 1, "Cele cislo je: %d", i); printf("%sn", s 1); return 0; 37

Formátované čítanie a zápis do reťazca Čítanie z reťazca a uloženie obsahu reťazca so

Formátované čítanie a zápis do reťazca Čítanie z reťazca a uloženie obsahu reťazca so špecifikovaným formátovaním do premennej sscanf(s 1, “%d %d”, &cislo 1, &cislo 2); Funkcia sprintf() a sscanf() umožňujú konverziu čísel na reťazce a naopak. 38