Funkcie tolower a toupper
Zmenu z veľkého znaku na malý znak vieme v jazyku C++ urobiť prostredníctvom funkcie tolower. Ak chceme z malého znaku urobiť veľký znak, využijeme funkciu toupper. Pozríme sa na prvý demonštratívny príklad.
1. príklad: Jednoduchý program na konverziu veľkostí znakov
#include <iostream> // hlavičkové súbory
#include <cctype>
using namespace std; // priestor mien
int main() //hlavná funkcia main
{
char znak1 = 'L'; // tento znak budeme testovať
char znak3;
char znak4;
if (islower(znak1)) // testujeme
znak3 = toupper(znak1); // meníme veľkosť znaku
else
znak3 = tolower(znak1);
char znak2 = 'v';
if (!isupper(znak2))
znak4 = toupper(znak2);
else
znak4 = tolower(znak2);
cout << "Prvy znak: " << znak3 << "\nDruhy znak: " << znak4; //výpis na obrazovku
return 0; // koniec programu
}
Výsledok programu:
Prvy znak: l Druhy znak: V
Skúsme teraz meniť veľkosť znakov v reťazci.
2. príklad:
#include <iostream> // hlavickové súbory
#include <cctype>
using namespace std; // priestor mien
int main() // hlavná funkcia main
{
string retazec = "MaestroPR"; // naš reťazec
for (size_t i = 0; i < retazec.size(); i++) // cyklus
{
if (islower(retazec[i])) // testujeme velkost znakov
cout << toupper(retazec[i]); // a meníme znaky a vypisujeme ich na obrázovku
else
cout << tolower(retazec[i]);
}
return 0; // koniec programu
}
Výsledok programu:
109656983848279112114
Stala sa v druhom programe chyba? Nie, len je potrebné ešte pridať knižnicu locale, aby sme definovali, že nechceme znaky v ASCII kóde. V prvom príklade sme knižnicu locale nepotrebovali, pretože sme rovno určili, s akou podobou znaku pracujeme. Opravíme tento kozmetický problém v treťom príklade.
3. príklad:
#include <iostream> // hlavickové súbory
#include <cctype>
#include <locale>
using namespace std; // priestor mien
int main() // hlavná funkcia main
{
locale loc;
string retazec = "MaestroPR"; // naš reťazec
for (size_t i = 0; i < retazec.size(); i++) // cyklus
{
if(islower(retazec[i])) // testujeme velkost znakov
cout << toupper(retazec[i], loc); // a meníme znaky a vypisujeme ich na obrázovku
else
cout << tolower(retazec[i], loc);
}
return 0; // koniec programu
}
Výsledok programu:
mAESTROpr
Skúsme teraz pozmeniť príklad z minulého dielu do plnohodnotného konvertora veľkostí znakov.
4. príklad:
#include <iostream> // hlavickové súbory
#include <cctype>
#include <locale>
using namespace std; // priestor mien
int main() // hlavná funkcia main
{
locale loc;
cout << "Tak najprv testneme nami navoleny retazec a potom zvolite vlastny retazec! \n";
string retazec = "Galaxia Andromeda\n"; // náš zvolený reťazec
cout << "Nas zvoleny retazec je: " << retazec;
for (size_t i = 0; i < retazec.size(); i++) // cyklus, ktory preverí každý znak v reťazci
{
if (islower(retazec[i])) // testujeme
cout << toupper(retazec[i], loc);
else
cout << tolower(retazec[i], loc);
}
cout << "\nOk zadajte teraz vy retazec!\n";
string retazec1;
cin >> retazec1; // užívateľ zadá reťazec
if (retazec1.empty())
{
cout << "Och chyba! Koncim!\n";
return 0;
}
cout << "Vas zvoleny retazec: " << retazec1 << "\n";
for (size_t i = 0; i < retazec1.size(); i++)
{
if(!isupper(retazec1[i])) // testujeme
cout << toupper(retazec1[i], loc);
else
cout << tolower(retazec1[i], loc);
}
return 0; // koniec programu
}
Výsledok programu:
Tak najprv testneme nami navoleny retazec a potom zvolite vlastny retazec! Nas zvoleny retazec je: Galaxia Andromeda gALAXIA aNDROMEDA Ok zadajte teraz vy retazec! PuntiK Vas zvoleny retazec: PuntiK pUNTIk








