V C++ okrem čísel vieme pracovať aj so znakmi. Znaky píšeme medzi jednoité
úvodzovky, napríklad 'a' 'z' 'F' '7' '.'
'#' '-'... Niektoré znaky treba písať pomocou \, ako sme
si už spomínali, napríklad '\n' alebo '\''.
Čo sa týka premenných, najlepšie je používať typ char, ktorý je v skutočnosti číselná premenná s rozsahom -128 až 127. Každé z týchto čísel má priradený nejaký znak podľa ASCII.
Napríklad $64$ je 'A', ale takéto veci si nemusíme pamätať,
lebo so znakmi sa dajú robiť matematické operácie ako s číslami.
Napríklad 'a'+1 == 'b'.
Ak chceme znak vypísať ako znak, tak použijeme značku %c.
Cvičenie: Skúste si spustiť nasledovné programy a porovnajte ich správanie:
#include <cstdio>
int main() {
char a;
scanf("%c", &a);
printf("<%c>\n", a);
}
#include <iostream>
using namespace std;
int main() {
char a;
cin >> a;
cout << "<" << a << ">" << endl;
}
Pole znakov, teda char meno[], môžeme nazývať reťazec.
Napríklad "jesko" je reťazec a zároveň je to pole
{'j', 'e', 's', 'k', 'o', '\0'}. '\0' je znak s hodnotou 0
a v C++ sa ním ukončujú všetky reťazce.
Všetky funkcie, ktoré robia niečo s reťazcami, končia čítanie reťazca
na nulových znakoch. Preto aj príkaz printf("a\0hoj"); vypíše len "a".
Jeden zo spôsobov ako vyrábať nami definované reťazce je napr.
char retazec[] = "lubovolny text";
Cvičenie: Ako jedným príkazom skrátime reťazec
char str[] = "dlhy retazec"; na dĺžku 3?
Načítavať a vypisovať reťazce vieme pomocou značky %s s tým rozdielom,
že pri načítavaní nepíšeme &.
#include <cstdio>
int main() {
char a[100];
scanf("%s", a);
printf("<%s>\n", a);
}
#include <iostream>
using namespace std;
int main() {
char a[100];
cin >> a;
cout << "<" << a << ">" << endl;
}
Ako si iste všimneme po spustení programov, reťazce sa načítavajú "po slovách", vždy len po najbližší biely znak (medzera, koniec riadku, tabulátor).
Pri reťazcoch (ale aj iných poliach) a operátoroch si treba dávať pozor. Keď
A a B sú polia, tak A<B nevráti true v
prípade, že A obsahuje menšie čísla. Rovnako aj A == B netestuje,
či polia obsahujú rovnaké čísla. Ani A + B nesčíta obsahy polí
ani A = B neprekopíruje čísla z jedného do druhého. Jednoducho
operátory robia s poľami celkom odlišné veci.
Je to spôsobené tým, že hodnota premenných A a B sú smerníky do
pamäte a operátory pracujú len s týmito smerníkmi.