C++
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Nizovi karaktera
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 byte. 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.
Decimalna vrijednost koja predstavlja znak 'A' je 65. To znači da castingom broja 65 u char tip podatka na ekranu možemo ispisati znak 'A'. Također je castingom karaktera u int tip podatka moguće pronaći njegovu vrijednost u ASCII tabeli.
Specijalni karakteri
Prva kolona ASCII tabele je rezervirana za specijalne znakove. Ovi znakovi znakovi imaju različite uloge ali najčešće su to neke smjernice o tome kako interpretirati dati text. 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.
Nizovi karaktera
Najjednostavniji način za pohranu teksta u C++ je korištenje niza karaktera.
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.
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. Ovaj karakter 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
-a.
Šta se desi ako nemamo ovaj karakter na kraju niza?
Pri ispisu niza karaktera koji nemaju terminirajući karakter moguće je dobiti razne neočekivane rezultate.
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.
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 i string-om.
Dužina niza
Funkcija koja vraća broj karaktera tako što izbroji sva polja do terminirajućeg je strlen
funckija.
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.
Kopiranje sadržaja
Poprilično je jednostavno ručno kopirati niz karaktera.
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.
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 polju bude nalazilo više od jednog byte-a podataka. Dupli navodni znaci se koriste za jednostavniju inicijalizaciju tekstualnih polja te automatski na kraj teksta dodaju terminirajući karakter.
Pokušajte veličinu niza postaviti na 6 i provjerite koju će grešku kompajler vratiti. I nakon ovakve inicijalizacije niza karaktera je moguće pomoću izvršiti ispis pomoću for petlje koja je napisana u jednom od ranijih primjera pošto se još uvijek radi samo o nizu karaktera.