Test veľkostí znakov
Najprv než dôjdeme k funkciam, ktoré nám umožnia meniť veľkosť písmen, bude sa nám hodiť test na odlíšenie veľkostí znakov. Keď zistíme túto informáciu, až tak môžme navoliť funkcie na zmenu veľkostí. Takýto test budete potrebovať všade tam, kedy neviete odhadnúť, aké veľké sú znaky napr. pri uživateľsky zadaných reťazcoch.
Na test veľkostí znakov slúžia funkcie islower a isupper. Prvá menovaná funkcia testuje, či znak je malý a druhá či veľký.
1. príklad: Testujeme veľkosť písmen
#include <iostream> // hlavičkové súbory #include <cctype> using namespace std; // priestor mien int main() //hlavná funkcia main { char znak1 = 'k'; // tento znak budeme testovať if (!islower(znak1)) // testujeme cout << "Znak " << znak1 << " je velke pismeno!\n"; if (!isupper(znak1)) cout << "Znak " << znak1 << " je male pismeno!\n"; char znak2 = 'R'; if (!islower(znak2)) cout << "Znak " << znak2 << " je velke pismeno!\n"; if (!isupper(znak2)) cout << "Znak " << znak2 << " je male pismeno!\n"; return 0; // koniec programu }
Výsledok programu:
Znak k je male pismeno! Znak R je velke pismeno!
2. príklad: Testujeme v reťazcoch veľkosť písmen
#include <iostream> // hlavickové súbory #include <cctype> using namespace std; // priestor mien int main() // hlavná funkcia main { cout << "Tak najprv testneme nami navoleny retazec a potom zvolite vlastny retazec! \n"; string retazec = "Galaxia Andromeda"; // náš zvolený reťazec cout << "Nas zvoleny retazec je: " << retazec; int pocitadloM = 0; //počitanie malých a veľkých znakov int pocitadloV = 0; for (size_t i = 0; i < retazec.size(); i++) // cyklus, ktory preverí každý znak v reťazci { if (islower(retazec[i])) // testujeme pocitadloM++; if (!islower(retazec[i])) pocitadloV++; } cout << "\nV retazci " << retazec << " je " << pocitadloM << " malych znakov a " << pocitadloV << " velkych znakov.\n\n"; cout << "Ok zadajte teraz vy retazec!\n"; string retazec1; cin >> retazec1; // užívateľ zadá reťazec if (retazec1.empty()) { cout << "Och chyba! Koncim!\n"; return 0; } pocitadloM = 0; // samozrejme musíme vynulovať doterajšie štatistiky pocitadloV = 0; cout << "Vas zvoleny retazec: " << retazec1 << "\n"; for (size_t i = 0; i < retazec1.size(); i++) { if(!isupper(retazec1[i])) // testujeme pocitadloM++; if(isupper(retazec1[i])) pocitadloV++; } cout << "V retazci " << retazec1 << " su " << pocitadloM << " male znaky a " << pocitadloV << " velke znaky.\n"; return 0; // koniec programu }
Výsledok programu:
Tak najprv testneme navoleny retazec a potom zvolite vlastny retazec! Nas zvoleny retazec je: Galaxia Andromeda V retazci Galaxia Andromeda je 14 malych znakov a 3 velkych znakov. Ok zadajte teraz vy retazec! slnIeckO Vas zvoleny retazec: slnIeckO V retazci slnIeckO su 6 male znaky a 2 velke znaky.
Rozbor programu:
Takže použili sme tesť veľkostí znakov v reťazcoch. Všetko sa zdá v poriadku až na jednú vec. Tam, kde testujeme vlastný reťazec, nám našlo 3 veľké znaky miesto zjavných dvoch. Je to preto, že medzeru určí ako veľký znak. Túto chybičku vieme skorigovať, ale o tom neskôr.