přejít na obsah přejít na navigaci

Linux E X P R E S, Programovanie v jazyku C++: Knižnica cctype (2)

Konference Cloud computing v praxi

Programovanie v jazyku C++: Knižnica cctype (2)

C++

V minulom diele sme si prvý krát predstavili knižnicu cctype a zamerali sme sa na test veľkostí znakov. V tomto článku budeme pokračovať tým, ako zmeniť veľké písmeno na malé a opačne. 


reklama

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



Nahoru

Top články z OpenOffice.cz

Příspěvky

Programovanie v jazyku C++: Knižnica cctype (2)
fela 25. 07. 2017, 09:24:28
Odpovědět  Odkaz 
ďakujem za článok, teraz sa to posúva do (pre mňa) zaujímavejšej roviny... ale chápem, že kdejaké úvody sú potrebné...
Programovanie v jazyku C++: Knižnica cctype (2)
Tomas 26. 07. 2017, 20:00:56
Odpovědět  Odkaz 
Nebolo by zaujimavejsie prechadzat string pomocou iteratoru?
Eduard Boldižár Re: Programovanie v jazyku C++: Knižnica cctype (2)
Eduard Boldižár 27. 07. 2017, 11:52:26
Odpovědět  Odkaz 
K tomu by som rád tiež dospel. Neskôr. Teraz pre nováčikov je potrebné vžiť sa s cyklami podmienkami atď :)

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky Exospace.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.


  • Distribuce: ubuntu
  • Grafické prostředí: unity


Soutěž - reproduktory Trust

Redakční blog

Redakce

Redakce, 21. prosinec

Pište pro LinuxEXPRES

Baví vás Linux? Pište o něm, není to nic těžkého. LinuxEXPRES hledá nové autory.


Pavel Fric

Pavel Fric, 23. říjen

Nové motivy pro přehrávač Sayonara

Pomozte rozšířit možnost měnit vzhled programu za běhu


Pavel Fric

Pavel Fric, 28. únor

Lollypop


Všechny blogy »