Download - Úvod do jazyka C
![Page 1: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/1.jpg)
Úvod do jazyka C
![Page 2: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/2.jpg)
2
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";
![Page 3: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/3.jpg)
3
Reťazec
Reťazec je vždy ukončený znakom \0 . 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 \0 bude program považovať za reťazec všetko až do konca pamäte alebo nasledujúceho znaku \0.
a h o j \0
index 0 1 2 3 4 5 6 7
voľná pamäť
![Page 4: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/4.jpg)
4
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 \0. Zvyšná pridelená pamäť je nevyužitá.
Pri alokování pamäte pre reťazec musíme pamätať aj na koncový znak \0 – tzn. výsledný reťazec bude dlhší o jeden bajt
![Page 5: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/5.jpg)
5
char str[50] = "Toto je retazec"; alokuje sa pole o 50-ich byte-och a naplní sa
reťazcom
char str[] = “retazec"; prekladač automaticky alokuje miesto o 7.
byte-och
0 1 2 3 4 5 6 7
r e t a z e c \0
![Page 6: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/6.jpg)
6
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
![Page 7: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/7.jpg)
7
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,
![Page 8: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/8.jpg)
8
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 \0 a preto predstavuje pole znakov o dĺžke 2.
![Page 9: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/9.jpg)
9
char pozdrav[] = "Ahoj";
char pozdrav[] = {'A','h','o','j','\0'};
sú ekvivalentné zápisy
![Page 10: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/10.jpg)
Práca so znakmi reťazca – vybratie znaku
char meno[]=“Peter”;
char c;
c=meno[2];
printf(“\n\r Treti znak je: %c”, c);
10
![Page 11: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/11.jpg)
Práca so znakmi reťazca – prepísanie znaku
Jednotlivé znaky sa adresujú indexom v zátvorkách, napr.
char meno[]=“Peter”;
meno[3]=‘x’;
printf(“\n\r Meno: %s”, meno);
11
![Page 12: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/12.jpg)
Výpis po znakoch I.
char meno[]=“Peter Novak”;
int i;
for(i=0; i<strlen(meno); i++)
{
printf(“\n\r Znak %d: %c”, i, meno[i]);
}
12
![Page 13: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/13.jpg)
Výpis po znakoch II.
char meno[]=“Peter Novak”;
int i;
for(i=0; i<4; i++)
{
printf(“\n\r Znak %d: %c”, i, meno[i]);
}
13
![Page 14: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/14.jpg)
18
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.
![Page 15: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/15.jpg)
Na kopírovanie jedného
retazca do iného slúži funkcia strcpy.
Funkcia má dva parametre
strcpy(meno,“Peto");
strcpy(meno2, meno1);
// mozne varianty
strcpy( &meno2, &meno1); // lepsia verzia
strcpy( (char*)&meno2 , (char*)&meno1);20
![Page 16: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/16.jpg)
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] = '\0';
int dlzka=4;
strncpy(pole,“Dlhy retazec",dlzka);
pole[dlzka] = '\0';21
![Page 17: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/17.jpg)
22
Kopírovanie jedného reťazca do druhého
int main()
{
char text[10] = "Ahoj";
printf(“\n\r %s ", text);
strcpy(text,“Iny text");
printf(“\n\r %s", text);
return 0;
}
![Page 18: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/18.jpg)
23
Kopírovanie jedného reťazca do druhého
int main(){ char text[100];
strncpy(text,“Toto je dlhy text",9);text[9] = '\0';printf("%s \n", text);
return 0;}
![Page 19: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/19.jpg)
Načítanie reťazca z klávesnicescanf(“%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 hovorí, koľko maximálne znakov sa môže prečítať. 24
![Page 20: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/20.jpg)
25
Štandardné funkcie pre 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 \0
Kopírovanie reťazca strcpy(s2, s1);skopíruje obsah reťazca s1 do s2
Spojenie reťazcov strcat(s2, s1);pripojí s1 k reťazcu s2
Nájdenie znaku v reťazci strchr(s1, ‘x’);keď sa znak x v reťazci vyskytuje vráti pointer na tento znak inak hodnotu NULL
![Page 21: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/21.jpg)
26
Štandardné funkcie pre prácu s reťazcami
Porovnanie dvoch reťazcov strcmp(s2, s1);funkcia vráti 0 keď sú reťazce rovnaké, keď je s1 menší kladné číslo a opačne.
Nájdenie podreťazca v reťazcistrstr(s2,s1);Nájde prvý výskyt reťazca s1 v reťazci s2 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)
strrchr(s1, 'x')
![Page 22: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/22.jpg)
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
![Page 23: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/23.jpg)
32
Štandardné funkcie pre 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(“\n\r Cele meno je: %s ”, cele_meno);
![Page 24: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/24.jpg)
33
Štandardné funkcie pre prácu s reťazcami
int rovnake;
char meno1[40], meno2[40];
printf(“\n\r Zadaj 1. meno: ”); scanf(“%s”,meno1);
printf(“\n\r Zadaj 2. meno: ”); scanf(“%s”,meno2);
rovnake=strcmp(meno1,meno2);
if(rovnake==0) printf(“\n\r Mena su rovnake”);
else printf(“\n\r Mena su rozdielne”);
![Page 25: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/25.jpg)
34
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.hatoi(s1) – int
atol(s1) – long
atof(s1) - double
![Page 26: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/26.jpg)
35
Príklad konverzia reťazca
#include <stdio.h> #include <stdlib.h> #include "moje.h"
int main(){ int i; char s1[] = "123";
i = atoi(s1); //konverzia reťazca na číslo
printf(“\n\r Retazec: %s\n", s1); //tlač reťazca printf(“\n\r Cislo: %d“, i); //tlač premennej i typu int}
![Page 27: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/27.jpg)
36
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)
![Page 28: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/28.jpg)
37
Formátovaný zápis do reťazca
Zápis dát do reťazca, ktorý môže byť neskôr ďalej využitý:
sprintf(s1, “%d”,i);
#include <stdio.h>
int main(){ int i = 5; char s1[20]; sprintf(s1, "Cele cislo je: %d", i); printf("%s\n",s1); return 0;}
![Page 29: Úvod do jazyka C](https://reader036.vdocuments.pub/reader036/viewer/2022062322/568150a2550346895dbea35f/html5/thumbnails/29.jpg)
38
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(s1, “%d %d”, &cislo1, &cislo2);
Funkcia sprintf() a sscanf() umožňujú konverziu čísel na reťazce a naopak.