You are on page 1of 10

Char tip podatka

Tip podatka koji se u C++ koristi za pohranu jednog znaka je char.


Veličina koju u memoriji zauzima ovaj tip podatka je 1 bajt (8 bita).
Pošto je u memoriji računara moguće pohraniti jedino brojevne vrijednosti svaki znak u
pozadini ima definisanu brojevnu vrijednost. Te brojevne vrijednosti su predstavljene
u American Standard Code for Information Interchange (ASCII) tabeli.

Npr. decimalna vrijednost koja predstavlja znak 'A' je 65. To znači da “casting-om” broja
65 u char tip podatka na ekranu moţemo ispisati znak 'A'. Također je casting-om
karaktera u int tip podatka moguće pronaći njegovu vrijednost u ASCII tabeli.

#include <iostream>

using namespace std;

int main(){

// int u char
cout << char(65) << endl;
// char u int
cout << int('A');

Specijalni karakteri

Prva kolona ASCII tabele je rezervisana za specijalne znakove. Ovi znakovi imaju
različite uloge, ali najčešće su to neke smjernice o tome kako interpretirati dati tekst.
Tako recimo, znak koji ima decimalnu vrijednost 13 ("carriage return") označava da je to
kraj jednog reda u tekstu. Ovaj znak se u C++ programskom jeziku osim castingom
broja 13 u char tip podatka moţe predstaviti i sa '\n' karakterom.

#include <iostream>

using namespace std;

int main(){

cout << "Prvi red" << char(13) << "Drugi red\n";

cout << "Treci red";

}
Nizovi znakova (karaktera)

Najjednostavniji način za pohranu teksta u C++ je korištenje niza karaktera .

#include <iostream>

using namespace std;

int main(){

// Deklaracija niza karaktera


char text[6];

// Inicijalizacija polja
text[0] = 'P';
text[1] = 'o';
text[2] = 'r';
text[3] = 'u';
text[4] = 'k';
text[5] = 'a';

// Ispis
for (int i = 0; i < 6; i++)
cout << text[i];

U prethodnom primjeru ručno su inicijalizirana sva polja u nizu kako bi se tekst pohranio
u memoriju.

U ovom slučaju nam je unaprijed poznata veličina niza, pa je jednostavno izvršiti ispis
teksta na ekran.

Pošto zbog dizajna C++ jezika ta duţina nije uvijek poznata standard za čuvanje teksta
u memoriji je da se na kraj ovog niza doda specijalni karakter koji ima decimalnu
vrijednost 0 ili '\0' te se niz ispiše pomoću while petlje.
#include <iostream>

using namespace std;

int main(){

// Deklaracija niza karaktera


char text[7] {'P','o','r','u','k','a','\0'};

// Ispis
int i = 0;
while (text[i] != '\0'){
cout << text[i];
i++;
}

// Novi red
cout << '\n';

// Ispis pomoću for petlje


for (i = 0; text[i] != '\0'; i++)
cout << text[i];

Korištenjem while petlje i jednog brojača koji prolazi kroz svaki član niza jednostavno je
ispisati sve karaktere i zaustaviti se na karakteru '\0' kada on dođe na red. Karakter '\0'
se naziva terminirajući karakter i uloga mu je da označi kraj nekog niza karaktera.
Kada korištenjem ovog karaktera označimo kraj niza moguće je niz ispisati i
pomoću cout.

#include <iostream>

using namespace std;

int main(){

// Deklaracija niza karaktera


char text[7] {'P','o','r','u','k','a','\0'};

// Ispis
cout << text;

}
Šta se desi ako nemamo karakter '\0' na kraju niza?

Pri ispisu niza znakova (karaktera) koji nemaju terminirajući karakter moguće je dobiti
razne neočekivane rezultate.

#include <iostream>

using namespace std;

int main(){

// Deklaracija niza karaktera


char text[7] {'P','o','r','u','k','a','\0'};

// Ispis
cout << text;

U ovom slučaju smo imali sreće pa pristupom memoriji izvan granica niza nismo doveli
do pada programa već do ispisa nasumičnih znakova nakon poruke.

VJEŢBA: Izvrši provjeru šta se ispiše nakon izvršenja programa.


Operacije sa nizom karaktera
C++ ima nekoliko predefinsianih funkcija za rad sa nizovima karaktera.
Veliki broj takvih funkcija se nalazi u cstring biblioteci.
Inače niz karaktera se također naziva string.

Dužina niza

Funkcija koja vraća broj karaktera (znakova) tako što izbroji sva polja do
terminirajućeg je strlen funkcija.

#include <iostream>
#include <cstring>

using namespace std;

int main(){

// Deklaracija niza karaktera


char text[7] {'P','o','r','u','k','a','\0'};

// Ispis dužine niza


cout << strlen(text);

Iako je veličina niza 7, ova funkcija će vratiti 6 kao duţinu niza pošto u proračun ne
uzima terminirajući karakter.

VJEŢBA: I - Izvrši provjeru ovog programa.


II -Napiši program sa tekstom po vlastitom izboru i to:
a) sa terminirajućim karakterom;
b) bez terminirajućeg karaktera.
Objasni šta se događa u oba slučaja ( a) i b) ) sa ispisom.
Kopiranje sadržaja

Ručno kopiranje niza karaktera je prilično jednostavno.

include <iostream>
#include <cstring>

using namespace std;

int main(){

// Deklaracija niza karaktera

char text[7] {'P','o','r','u','k','a','\0'};

// Deklaracija drugog niza koji ima velicinu za jedan vecu od


broja karaktera prvog niza kako bi rezervisali prostor za
terminirajuci karakter

char kopija[strlen(text) + 1];

// Kopiranje elemenata iz jednog u drugi niz

for (int i = 0; i < strlen(text) + 1; i++)


kopija[i] = text[i];

// Ispis drugog niza

cout << kopija;

}
U biblioteci cstring već postoji funkcija koja će nam skratiti ovaj posao.

To je funkcija strcpy.

Potrebno joj je proslijediti 2 parametra, a to su destinacijski i izvorni niz.

#include <iostream>
#include <cstring>

using namespace std;

int main(){

// Deklaracija niza karaktera

char text[7] {'P','o','r','u','k','a','\0'};

// Deklaracija drugog niza koji ima velicinu za jedan vecu od


broja karaktera prvog niza kako bi rezervisali prostor za
terminirajuci karakter

char kopija[strlen(text) + 1];

// Kopiranje elemenata iz jednog u drugi niz

strcpy(kopija, text);

// Ispis drugog niza


cout << kopija;

}
Dupli navodni znaci
Ukoliko u C++ programskom jeziku koristimo jednostruke navodne
znake ' podrazumijeva se da se radi o jednom char podatku i kompajler će vratiti
grešku ukoliko se u tom nizu bude nalazilo više od jednog bajta (Byte-a) podataka.

Dupli navodni znaci se koriste za jednostavniju inicijalizaciju tekstualnih polja, te


automatski na kraj teksta dodaju terminirajući karakter.

#include <iostream>

using namespace std;

int main(){

// Deklaracija niza karaktera - Bitno je znati da je string


"Poruka" dužine 6 karaktera, ali da je veličina niza 7 zbog
terminirajućeg karaktera

char text[7] = "Poruka";

// Ispis

cout << text;

VJEŢBA: Pokušajte veličinu niza postaviti na 6 i provjerite koju će grešku kompajler


vratiti.
I nakon ovakve inicijalizacije niza karaktera moguće je izvršiti ispis pomoću for petlje,
pošto se još uvijek radi samo o nizu karaktera:

#include <iostream>

using namespace std;

int main(){

char text[7] = "Poruka";

for (int i = 0; text[i] != '\0'; i++)

cout << text[i];

You might also like