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

Linux E X P R E S, Programovanie v jazyku C++: Knižnica string – funkcia compare (1)

Alvao

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

C++

V tomto článku sa pozrieme na funkciu compare s ktorou môžeme porovnávať reťazce. Rovnako si v článku rozoberieme trochu komplikovanejšie návrátove hodnoty funkcie compare . 


reklama

Funkcia compare

Ak chcete porovnať dve reťazce alebo vyhľadať podreťazec v reťazci, môžete využiť funkciu compare. Ukážme si jeden zo spôsobov využitia funkcie compare:

int num retazec1.compare(retazec2);

kde návratová hodnota funkcie compare je int. Návratová hodnota funkcie compare môže byť menšia ako 0, väčšia ako nula a rovná 0. Funkcia compare porovnáva jednotlivé znaky a podľa toho určuje výslednú návratovú hodnotu. O návratových hodnotách funkcie compare urobíme program, pretože interpretovať to, čo nám vracia nie je práve triviálne. Najčastejším využitím funkcie je rozhodnúť, či hľadaný reťazec resp. podreťazec sa nachádza v skúmanom reťazci.

1. príklad: Jednoduchý program na funkciu compare

#include <iostream>   // hlavickove subory
#include <string>
using namespace std;  // priestor mien

int main()
{
    string retazec1 = "Polarka";
    string retazec2 = "Polarka";
    int num1 = retazec1.compare(retazec2);
    if(num1 == 0)
        cout << "Jupi retazce su rovnake!\n";
    else cout << "Smola!\n";

    string retazec3 = "Proxima Centauri";
    string retazec4 = "Proxima Centauri";
    int num2 = retazec4.compare(retazec3);
    if(num2 != 0)
        cout << "Smola!\n";
    else cout << "Je to tam, retazce su rovnake!";
    return 0;  // koniec programu
}

Výsledok programu:

Jupi retazce su rovnake!
Je to tam, retazce su rovnake!

2. príklad: Návratové hodnoty funkcie compare

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

using namespace std;  // priestor mien

int main()
{
    string retazec1 = "Canopus";
    string retazec2 = "Canopus";
    int num1 = retazec1.compare(retazec2);
    int num2 = retazec2.compare(retazec1);
    cout << "num1: " << num1 << " num2: " << num2 << "\n";   // 1. test

    string retazec3 = "Banopus";
    string retazec4 = "Canopus";
    int num3 = retazec3.compare(retazec4);
    int num4 = retazec4.compare(retazec3);
    cout << "num3: " << num3 << " num4: " << num4 << "\n";   // 2. test

    string retazec5 = "Canopus";
    string retazec6 = "Aanopus";
    int num5 = retazec5.compare(retazec6);
    int num6 = retazec6.compare(retazec5);
    cout << "num5: " << num5 << " num6: " << num6 << "\n";   // 3. test

    string retazec7 = "Canopss";
    string retazec8 = "Canopvs";
    int num7 = retazec7.compare(retazec8);
    int num8 = retazec8.compare(retazec7);
    cout << "num7: " << num7 << " num8: " << num8 << "\n";   // 4. test

    string retazec9 = "Canrrrs";
    string retazec10 = "Canopus";
    int num9 = retazec9.compare(retazec10);
    int num10 = retazec10.compare(retazec9);
    cout << "num9: " << num9 << " num10: " << num10 << "\n";  // 5. test

    string retazec11 = "Canopus";
    string retazec12 = "CanoPus";
    int num11 = retazec11.compare(retazec12);
    int num12 = retazec12.compare(retazec11);
    cout << "num11: " << num11 << " num12: " << num12 << "\n";  // 6. test

    return 0;  // koniec programu
}

Výsledok programu:

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

Rozbor programu:

1. test - oba reťazce sú rovnaké, preto návratová hodnota je 0

2. test - porovnáva prvé znaky v oboch reťazcoch a vyhodnotí podľa toho, ktorý znak má väčšiu hodnotu v ASCII kóde. Ďalšie znaky funkciu compare nezaujíma, stačí prvý nesúlad medzi oboma reťazcami a vráti danú hodnotu. Keďže písmeno B je nižšie ako písmeno C v ASCII tabuľke, preto bude num3 < 0 a num4 > 0. A teraz k daným hodnotám. Pri každom objavení čo by len jedného nesúladu, vráti hodnotu -1 alebo 1.

Ešte poznámka, ak máme retazec1.compare(retazec2); tak to znamená, že reťazec1 je ten základný reťazec, ku ktorému sa porovnáva reťazec2. To len taká odbočka, pretože môže robiť trochu problémy zorientovať sa v tom, čo sa vlastne porovnáva a čo predstavujú tie návratové hodnoty.

3. test - znak A je menší ako znak C, preto num5 je kladná 1 a num6 -1.

4. test - nezáleží kde v reťazcoch vznikne nesúlad, platí že návratová hodnota sa odvíja od prvého nesúladu

5. test - ako vidíte, ani ďalšie rozdielne reťazce nezaujímajú, rozhoduje prvá nezrovnalosť

6. test – nezabudnite veľké P má menšiu ASCII hodnotu ako malé p

Nahoru

Příspěvky

Programovanie v jazyku C++: Knižnica string – funkcia compare (1)
Tomas 10. 10. 2017, 22:18:10
Odpovědět  Odkaz 
Metóda string::compare() v skutočnosti vracia typ int, ktorý je znamienkový. Čiže mala by vracať korektne -1,0,1. Tak by som to radšej opravil.
Eduard Boldižár Re: Programovanie v jazyku C++: Knižnica string – funkcia compare (1)
Eduard Boldižár 10. 10. 2017, 23:55:08
Odpovědět  Odkaz 
Myslím, že som tam dostatočne zvýraznil, že compare vracia typ size_t, čiže konkretnejšie unsigned integer
Re: Re: Programovanie v jazyku C++: Knižnica string – funkcia compare (1)
Tomas 11. 10. 2017, 07:30:38
Odpovědět  Odkaz 
Problém nie je v tom, že by to nebolo zvýraznené, ale string::compare() v skutočnosti vracia znamienkový int.
Eduard Boldižár Re: Re: Re: Programovanie v jazyku C++: Knižnica string – funkcia compare (1)
Eduard Boldižár 11. 10. 2017, 11:10:07
Odpovědět  Odkaz 
Otestoval som si to a máte pravdu, niektoré veci v článku pozmením
Re: Re: Programovanie v jazyku C++: Knižnica string – funkcia compare (1)
Jano 11. 10. 2017, 10:59:07
Odpovědět  Odkaz 
vracia int a nie size_t

http://www.cplusplus.com/reference/string/string/compare/

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



 
 

Top články z OpenOffice.cz

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


Alvao

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 »

Geotronics - Bezpilotně