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)

Atos

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 . 


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 astrotech.cz. Mám 25 rokov. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.


  • Distribuce: ubuntu
  • Grafické prostředí: unity



Public Relations

Při testování nových vozů pomáhá Samsung Knox: příručka, navigace i určování polohy v jednom

Samsung KnoxBezpečnostní platforma Samsung Knox sehrála výraznou roli při představování Škody Karoq. Knox Configure a Knox Manage pomohly připravit stovky vozů pro dovozce a obchodníky.

Pokračování ...



Public Relations

S obrovským nárůstem dat by mohla pomoci umělá inteligence

LenovoO chytrých technologiích, IoT zařízeních a umělé inteligenci (AI) slýcháme poměrně často v nejrůznějších souvislostech. Pomalu ale jistě pronikají nejen do našich soukromých životů, ale také do fungování ve firmách. Málo se už ale mluví o jejich počtech a také o množství dat, která tato zařízení produkují. Obě hodnoty přitom neustále rostou.

Pokračování ...


Redakční blog

Pavel Fric

Pavel Fric, 21. srpen

Sayonara Player 1.5.1

Přehrávač, jak má být. Poslední dobou vývoj šlape


Pavel Fric

Pavel Fric, 26. leden

MuseScore 3

První aktualizace třetí řady notačního editoru MuseScore


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.


Všechny blogy »

Alvao