Linux E X P R E S

Facebook

Programovanie v jazyku C++: Knižnica string – funkcia compare (2)

C++

Pokračujeme druhým dielom v predstavovaní funkcie compare z knižnice string. 


Ďalšie testy s funkciou compare

V minulom diele sme trochu vysvetlili návratové hodnoty funkcie compare, avšak sme si neukázali všetko. Tak poďme sa pozrieť nato, čo som v minulom diele vynechal.

1. príklad: Pokračovanie s návratovými hodnotami funkcie compare

#include <iostream>   // hlavičkove subory
#include <string>

using namespace std;  // priestor mien

int main()
{
    string retazec1 = "Stellaris";
    string retazec2 = "Stellaris";
    int num1 = retazec1.compare(retazec2);
    int num2 = retazec2.compare(retazec1);

    cout << "num1: " << num1 << " num2: " << num2 << "\n";   // 1. test

    string retazec3 = "hra Stellaris";
    string retazec4 = "Stellaris";
    int num3 = retazec3.compare(retazec4);
    int num4 = retazec4.compare(retazec3);

    cout << "num3: " << num3 << " num4: " << num4 << "\n";   // 2. test

    string retazec5 = "Stellaris hra";
    string retazec6 = "Stellaris";
    int num5 = retazec5.compare(retazec6);
    int num6 = retazec6.compare(retazec5);

    cout << "num5: " << num5 << " num6: " << num6 << "\n";   // 3. test

    string retazec7 = "Stellaris hra";
    string retazec8 = "vStellaris hra";
    int num7 = retazec7.compare(retazec8);
    int num8 = retazec8.compare(retazec7);

    cout << "num7: " << num7 << " num8: " << num8 << "\n";   // 4. test

    string retazec9 = "Stellaris             ";
    string retazec10 = "Stellaris vesmirna hra";
    int num9 = retazec9.compare(retazec10);
    int num10 = retazec10.compare(retazec9);

    cout << "num9: " << num9 << " num10: " << num10 << "\n";   // 5. test

    return 0;  // koniec programu
}

Výsledok programu:

num1: 0 num2: 0
num3: 1 num4: -1
num5: 4 num6: -4
num7: -1 num8: 1
num9: -1 num10: 1

Rozbor programu:

Opäť si výsledky rozdelíme na testy.

1. test – Tento spôsob už poznáte, oba reťazce sú rovnaké

2. test – Pre zopakovanie, funkcia compare vyhodnocuje od počiatočných znakov a podľa toho sa odvíja návrátova hodnota. Keďže h má väčšie ASCII hodnotu ako S, tak num3 je 1 a num4 -1.

3. test – Čo sa stane, ak funkcia compare porovnáva jednotlivé znaky, avšak narazí na situáciu, že jeden z reťazcov je dlhší a i napriek tomu boli doteraz reťazce rovnaké? Návratová hodnota 4 pri num5 znamená, že reťazec5 je o 4 znaky dlhší ako reťatec6 a num6 je presne naopak.

4. test – Stačí jeden nesúlad a už porovnávanie skončí bez ohľadu, že zvyšok reťazca môžu mať rovnaký.

5. test – Majú sice spočiatku rovnaké znaky, ale nezabudníte, že i medzera je znak.

Rôzne možností deklarácie funkcie compare

Máme niekoľko možností, ako využiť funkciu compare.

2. príklad: Rôzné deklaračné spôsoby funkcie compare

#include <iostream>   // hlavičkove subory
#include <string>

using namespace std;  // priestor mien

int main()
{
    string retazec1 = "Najlepsia grand vesmirna strategia je hra Stellaris!";
    string retazec2 = "Stellaris";

    if (retazec1.compare(retazec2) == 0)   // prvy sposob
        cout << "Prvy retazec je rovnaky ako druhy\n";
    else
        cout << "Prvy retazec nie je rovnaky ako druhy\n";

    if (retazec1.compare(42, 9, "Stellaris") == 0)   // druhy sposob
        cout << "Prvy retazec je rovnaky ako druhy\n";
    else
        cout << "Prvy retazec nie je rovnaky ako druhy\n";

    if (retazec1.compare(retazec1.size()-10, 9, "Stellaris") == 0)   // treti sposob
        cout << "Prvy retazec je rovnaky ako druhy\n";
    else
        cout << "Prvy retazec nie je rovnaky ako druhy\n";

    if (retazec1.compare(retazec1.size()-10, 9, retazec2, 0, 9) == 0)   // stvrty sposob
        cout << "Prvy retazec je rovnaky ako druhy\n";
    else
        cout << "Prvy retazec nie je rovnaky ako druhy\n";

    return 0;  // koniec programu
}

Výsledok programu:

Prvy retazec nie je rovnaky ako druhy
Prvy retazec je rovnaky ako druhy
Prvy retazec je rovnaky ako druhy
Prvy retazec je rovnaky ako druhy

Rozbor programu:

1. spôsob – toto by malo byť jasné,

2. spôsob – prvý argument je pozícia v reťazci, od ktorého začne funkcia compare porovnávať a druhý argument predstavuje počet znakov od prvého znaku definovaného v prvom argumente a tretí argument je hľadaný reťazec,

3. spôsob – rovnako ako pri druhom spôsobe až na využitie funkcie size,

4. spôsob – je to taká kombinácia prvého a druhého (resp. tretieho) spôsobu, prve dve argumenty sa vzťahujú k retazcu1 a k retazcu2 štvrtý a piaty argument.

Diskuze (0) Nahoru