Back
Close

C++

Adi.exe
892 views

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.

ASCII tabela

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.

Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io
codingame x discord
Join the CodinGame community on Discord to chat about puzzle contributions, challenges, streams, blog articles - all that good stuff!
JOIN US ON DISCORD
Online Participants