Ď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.
