3 начина за упоређивање ниски у C++

Uvod

C++ je izuzetno moćan programski jezik, koji programerima pruža bogatstvo funkcionalnosti i alatki za manipulaciju stringovima. Jedna od fundamentalnih operacija je poređenje stringova, esencijalno za obavljanje mnogih programerskih zadataka, od sortiranja podataka do validacije korisničkog unosa.

U C++-u, postoji nekoliko načina za poređenje stringova, svaki sa svojim specifičnim prednostima i nedostacima. U ovom tekstu, fokusiraćemo se na tri najčešće korišćena pristupa:

1. Poređenje pomoću operatora ==: Ovo je najjednostavnija metoda za upoređivanje stringova, ali poseduje određena ograničenja.
2. Poređenje koristeći funkciju strcmp(): Ova funkcija omogućava veću fleksibilnost i kontrolu nad procesom poređenja.
3. Poređenje putem klase string: Kroz metode klase string, možemo pristupiti širokom spektru funkcija namenjenih poređenju stringova.

Poređenje Korišćenjem Operatora ==

Operator == predstavlja najosnovniji način za poređenje stringova u C++. On proverava da li su dva stringa apsolutno identična, slovo po slovo, i po redosledu karaktera.


#include <iostream>
#include <string>

int main() {
  std::string str1 = "Pozdrav";
  std::string str2 = "Pozdrav";

  if (str1 == str2) {
    std::cout << "Stringovi su jednaki." << std::endl;
  } else {
    std::cout << "Stringovi nisu jednaki." << std::endl;
  }

  return 0;
}

Ovaj kod će na konzoli ispisati: „Stringovi su jednaki.“, budući da su str1 i str2 potpuno identični stringovi.

Iako je veoma jednostavan, operator == ima određena ograničenja. On ne pravi razliku između velikih i malih slova, niti se bavi problemom praznih karaktera. Na primer, stringovi „Pozdrav“ i „pozdrav“ bi bili smatrani jednakim, što može predstavljati problem u nekim situacijama.

Poređenje Korišćenjem Funkcije strcmp()

Funkcija strcmp(), koja se nalazi u heder fajlu <cstring>, pruža veću fleksibilnost u poređenju stringova. Ona prima dva argumenta – pokazivače na stringove – i vraća celobrojnu vrednost koja predstavlja rezultat poređenja.

* strcmp(str1, str2) == 0: Stringovi str1 i str2 su identični.
* strcmp(str1, str2) < 0: String str1 je leksikografski ispred stringa str2.
* strcmp(str1, str2) > 0: String str1 je leksikografski iza stringa str2.


#include <iostream>
#include <cstring>

int main() {
  char str1[] = "Pozdrav";
  char str2[] = "pozdrav";

  if (strcmp(str1, str2) == 0) {
    std::cout << "Stringovi su jednaki." << std::endl;
  } else {
    std::cout << "Stringovi nisu jednaki." << std::endl;
  }

  return 0;
}

U ovom primeru, strcmp(str1, str2) će vratiti vrednost koja nije nula, zato što stringovi str1 i str2 nisu identični.

Funkcija strcmp() je osetljiva na velika i mala slova. Ako želite da se poređenje ne vrši sa razlikovanjem velikih i malih slova, možete koristiti funkcije stricmp() ili strcasecmp() (u zavisnosti od kompajlera).

Poređenje Korišćenjem Klase string

Klasa string u C++-u nudi bogatu kolekciju metoda za rad sa stringovima, uključujući i metode za njihovo poređenje.

Metoda compare()

Metoda compare() se koristi za poređenje dva stringa i vraća celobrojnu vrednost koja predstavlja rezultat poređenja.

* str1.compare(str2) == 0: Stringovi str1 i str2 su jednaki.
* str1.compare(str2) < 0: String str1 je leksikografski ispred stringa str2.
* str1.compare(str2) > 0: String str1 je leksikografski iza stringa str2.


#include <iostream>
#include <string>

int main() {
  std::string str1 = "Pozdrav";
  std::string str2 = "pozdrav";

  if (str1.compare(str2) == 0) {
    std::cout << "Stringovi su jednaki." << std::endl;
  } else {
    std::cout << "Stringovi nisu jednaki." << std::endl;
  }

  return 0;
}

Ovaj kod će ispisati: „Stringovi nisu jednaki.“, jer str1 i str2 nisu identični.

Metoda operator==

Metoda operator== se može koristiti za proveru da li su dva stringa identična, slično kao i operator == za osnovne tipove podataka.


#include <iostream>
#include <string>

int main() {
  std::string str1 = "Pozdrav";
  std::string str2 = "pozdrav";

  if (str1 == str2) {
    std::cout << "Stringovi su jednaki." << std::endl;
  } else {
    std::cout << "Stringovi nisu jednaki." << std::endl;
  }

  return 0;
}

Ovaj kod će ispisati: „Stringovi nisu jednaki.“, jer str1 i str2 nisu identični.

Metode operator!=, operator<, operator>, operator<=, operator>=

Klasa string takođe nudi operatore operator!=, operator<, operator>, operator<=, operator>= za poređenje stringova.

* str1 != str2: Stringovi str1 i str2 nisu jednaki.
* str1 < str2: String str1 je leksikografski ispred stringa str2.
* str1 > str2: String str1 je leksikografski iza stringa str2.
* str1 <= str2: String str1 je leksikografski ispred ili jednak stringu str2.
* str1 >= str2: String str1 je leksikografski iza ili jednak stringu str2.


#include <iostream>
#include <string>

int main() {
  std::string str1 = "Pozdrav";
  std::string str2 = "pozdrav";

  if (str1 < str2) {
    std::cout << "str1 je leksikografski ispred str2." << std::endl;
  } else {
    std::cout << "str1 nije leksikografski ispred str2." << std::endl;
  }

  return 0;
}

Ovaj kod će ispisati: „str1 nije leksikografski ispred str2.“, jer je str1 leksikografski iza str2.

Zaključak

U C++-u, postoji više načina za poređenje stringova, svaki sa svojim prednostima i manama. Operator == je jednostavan za upotrebu, ali ograničen po funkcionalnosti. Funkcija strcmp() je fleksibilnija, ali može biti složenija za korišćenje. Klasa string nudi bogatu kolekciju metoda za poređenje stringova, što pojednostavljuje rad sa istim.

Neophodno je odabrati metodu koja najviše odgovara vašim specifičnim potrebama i upoznati se sa njenim osobinama. Ovo znanje će vam omogućiti efikasno upravljanje stringovima u vašim C++ programima.

Često Postavljana Pitanja

1. Šta se podrazumeva pod pojmom „leksikografski red“?
Leksikografski red je poredak stringova onako kako se oni sortiraju u rečniku. Na primer, „a“ je leksikografski ispred „b“, a „Pozdrav“ je ispred „Zlato“.
2. Koja je razlika između strcmp() i stricmp()?
strcmp() pravi razliku između velikih i malih slova, dok stricmp() ne pravi razliku.
3. Kako se porede stringovi različite dužine?
Poređenje se vrši karakter po karakter, dok se ne dođe do kraja kraćeg stringa. Ukoliko su svi karakteri jednaki, kraći string je leksikografski ispred dužeg.
4. Da li je string klasa bolja od char nizova?
Klasa string pruža više funkcija i veću sigurnost u korišćenju u odnosu na char nizove. Međutim, char nizovi mogu biti efikasniji u nekim specifičnim situacijama.
5. Kako se porede stringovi sa specijalnim karakterima?
Poređenje sa specijalnim karakterima zavisi od kodiranja karaktera koje se koristi.
6. Šta je std::string i gde se koristi?
std::string je klasa koja se koristi za predstavljanje stringova u C++. Ona obezbeđuje sigurnost, funkcionalnost i efikasnost u radu sa stringovima.
7. Šta je strcmp() i kako se može koristiti za poređenje stringova?
strcmp() je funkcija koja se koristi za poređenje stringova i vraća celobrojnu vrednost koja predstavlja rezultat poređenja.
8. Kako se može koristiti operator == za poređenje stringova u C++-u?
Operator == se može koristiti za proveru da li su dva stringa potpuno identična.
9. Kako se mogu uporediti stringovi sa različitim kodiranjem karaktera?
Za poređenje stringova sa različitim kodiranjem karaktera, može se koristiti funkcija wcscoll() koja uzima u obzir lokalizaciju.
10. Gde mogu da pronađem više informacija o korišćenju stringova u C++-u?
Dodatne informacije možete naći u zvaničnoj dokumentaciji C++ programskog jezika.

Oznake: C++, string, poređenje, strcmp, compare, operator==, operator!=, operator<, operator>, operator<=, operator>=, poređenje stringova, stringovi, poređivanje, C++ stringovi, C++ programski jezik, funkcije za poređenje, C++ kompajler, C++ dokumentacija, stringovi u C++, leksikografski red, kodiranje karaktera, lokalizacija

Linkovi:

* C++ Dokumentacija
* C++ Tutorial – Stringovi
* Poređenje Stringova u C++-u