Linux E X P R E S

Facebook

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

C++

V tomto článku si prvý krát ukážeme knižnicu cctype , ktorá nám umožní manipulovať zo znakmi. Knižnica je využiteľná všade tam, kde chcete meniť charakter znakov, napríklad zmeniť malé písmeno (znak) na veľké. V prvom dieli mini série o knižnici cctype si ukážeme testovanie veľkostí znakov. Pôjde o funkcie islower a isupper . 


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.

Diskuze (0) Nahoru