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