Vod do jazyka c
Download
1 / 29

Úvod do jazyka C - PowerPoint PPT Presentation


  • 101 Views
  • Uploaded on

Úvod do jazyka C. Algoritmizácia úloh. Reťazce. Reťazec je špeciálny typ jednoroz m erné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";. Reťazec. voľná pamäť.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Úvod do jazyka C' - fairly


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Vod do jazyka c

Úvod do jazyka C

Algoritmizácia úloh


Re azce
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";


Re azec
Reťazec

voľná pamäť

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.


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


char str[50] = "Toto je retazec"; 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á.

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 etaze c \0


Pr ca s re azcami
Práca s reťazcami 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á.

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 azcami1
Práca s reťazcami 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á.

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,


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.


char pozdrav[] = "Ahoj"; napr.

char pozdrav[] = {'A','h','o','j','\0'};

sú ekvivalentné zápisy


Pr ca so znakmi re azca vybratie znaku
Práca so znakmi reťazca – vybratie znaku napr.

char meno[]=“Peter”;

char c;

c=meno[2];

printf(“\n\r Treti znak je: %c”, c);


Pr ca so znakmi re azca prep sanie znaku
Práca so znakmi reťazca – prepísanie znaku napr.

Jednotlivé znaky sa adresujú indexom v zátvorkách, napr.

char meno[]=“Peter”;

meno[3]=‘x’;

printf(“\n\r Meno: %s”, meno);


V pis po znakoch i
Výpis po znakoch napr. I.

char meno[]=“Peter Novak”;

int i;

for(i=0; i<strlen(meno); i++)

{

printf(“\n\r Znak %d: %c”, i, meno[i]);

}


V pis po znakoch i i
Výpis po znakoch napr. II.

char meno[]=“Peter Novak”;

int i;

for(i=0; i<4; i++)

{

printf(“\n\r Znak %d: %c”, i, meno[i]);

}


Ako naplni re azec
Ako napr. 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.


Na kop rovanie jedn ho retazca do in ho sl i funkcia strcpy
Na kopírovanie jedného napr. 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);


Na kop rovanie jedn ho retazca do in ho sl i funkcia strncpy
Na kopírovanie jedného napr. 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


Kop rovanie jedn ho re azca do druh ho
Kopírovanie jedného reťazca do druhého napr.

int main()

{

char text[10] = "Ahoj";

printf(“\n\r %s ", text);

strcpy(text,“Iny text");

printf(“\n\r %s", text);

return 0;

}


Kop rovanie jedn ho re azca do druh ho1
Kopírovanie jedného reťazca do druhého napr.

int main()

{

char text[100];

strncpy(text,“Toto je dlhy text",9);

text[9] = '\0';

printf("%s \n", text);

return 0;

}

23


N napr. ačí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 hovorí, koľko maximálne znakov sa môže prečítať.


Tandardn funkcie pre pr cu s re azcami
Štandardné funkcie pre prácu s reťazcami napr.

Knižnicastring.h

Dlžka reťazca dlzka=strlen(“text“);

vráti hodnotu dĺžky reťazca bez znaku \0

Kopírovanie reťazcastrcpy(s2, s1);

skopíruje obsah reťazca s1 do s2

Spojenie reťazcovstrcat(s2, s1);

pripojí s1 k reťazcu s2

Nájdenie znaku v reťazcistrchr(s1, ‘x’);

keď sa znak x v reťazci vyskytuje vráti pointer na tento znak inak hodnotu NULL


Tandardn funkcie pre pr cu s re azcami1
Štandardné funkcie pre prácu s reťazcami napr.

Porovnanie dvoch reťazcovstrcmp(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ťazci strstr(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')


Funkcie ktor pracuj s re azcami
Funkcie, ktoré pracujú s reťazcami napr.

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,


Tandardn funkcie pre pr cu s re azcami2
Štandardné funkcie pre prácu s reťazcami napr.

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


Tandardn funkcie pre pr cu s re azcami3
Štandardné funkcie pre prácu s reťazcami napr.

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


Prevod re azcov na sla
Prevod reťazcov na čísla napr.

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(s1) – int

atol(s1) – long

atof(s1) - double


Pr klad konverzia re azca
Príklad konverzia reťazca napr.

#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

}


Form tovan z pis do re azca
Formátovaný zápis do reťazca napr.

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 azca1
Formátovaný zápis do reťazca napr.

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;

}


Form tovan tanie a z pis do re azca
Formátované čítanie a zápis do reťazca napr.

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


ad