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