Преглед садржаја
3 начина за упоређивање ниски у C++
Увод
C++ је моћан програмски језик који нуди богат скуп функција и алата за рад са нискама. Једна од најчешћих операција је упоређивање ниски, што је неопходно за многе програмске задатке, од сортирања података до валидације уноса.
У C++-у, постоји више начина за упоређивање ниски, од којих сваки има своје предности и мане. У овом чланку ћемо се фокусирати на три најчешћа начина:
1. Упоређивање коришћењем оператора ==
: Ово је најједноставнији начин за упоређивање ниски, али има ограничења.
2. Упоређивање коришћењем функције strcmp()
: Ова функција нуди флексибилност и контролу над процесом упоређивања.
3. Упоређивање коришћењем класе string
: Кроз методе класе string
, имамо приступ широком спектру функција за упоређивање ниски.
Упоређивање коришћењем оператора ==
Оператор ==
је најједноставнији начин за упоређивање ниски у C++-у. Он проверава да ли су две ниске идентичне, по карактеру, по реду.
cpp
#include <iostream>
#include <string>
int main() {
std::string str1 = "Здраво";
std::string str2 = "Здраво";
if (str1 == str2) {
std::cout << "Ниске су једнаке." << std::endl;
} else {
std::cout << "Ниске нису једнаке." << std::endl;
}
return 0;
}
Овај код ће исписати: „Ниске су једнаке.“ јер су str1
и str2
идентичне ниске.
Иако једноставан, оператор ==
има ограничења. Он не разликује велика и мала слова, нити се бави проблемом празних карактера. На пример, ниске „Zdravo“ и „zdravo“ би биле сматране једнаким, што може бити проблем у неким ситуацијама.
Упоређивање коришћењем функције strcmp()
Функција strcmp()
се налази у заглављу <cstring>
и нуди већу флексибилност у упоређивању ниски. Она прихвата два аргумента – показиваче на ниске – и враћа цели број који представља резултат упоређивања.
* strcmp(str1, str2) == 0
: Ниске str1
и str2
су једнаке.
* strcmp(str1, str2) < 0
: Ниска str1
је лексичког реда пре ниске str2
.
* strcmp(str1, str2) > 0
: Ниска str1
је лексичког реда после ниске str2
.
cpp
#include <iostream>
#include <cstring>
int main() {
char str1[] = "Zdravo";
char str2[] = "zdravo";
if (strcmp(str1, str2) == 0) {
std::cout << "Ниске су једнаке." << std::endl;
} else {
std::cout << "Ниске нису једнаке." << std::endl;
}
return 0;
}
У овом случају, strcmp(str1, str2)
ће вратити вредност различиту од 0 јер ниске str1
и str2
нису идентичне.
Функција strcmp()
је осетљива на велика и мала слова. Ако желите да се упоређивање не врши са осетљивошћу на велика и мала слова, можете користити функције stricmp()
или strcasecmp()
(зависи од компајлера).
Упоређивање коришћењем класе string
Класа string
у C++-у нуди богату колекцију метода за рад са нискама, укључујући и методе за упоређивање.
Метода compare()
Метода compare()
се користи за упоређивање две ниске и враћа цели број који представља резултат упоређивања.
* str1.compare(str2) == 0
: Ниске str1
и str2
су једнаке.
* str1.compare(str2) < 0
: Ниска str1
је лексичког реда пре ниске str2
.
* str1.compare(str2) > 0
: Ниска str1
је лексичког реда после ниске str2
.
cpp
#include <iostream>
#include <string>
int main() {
std::string str1 = "Zdravo";
std::string str2 = "zdravo";
if (str1.compare(str2) == 0) {
std::cout << "Ниске су једнаке." << std::endl;
} else {
std::cout << "Ниске нису једнаке." << std::endl;
}
return 0;
}
Овај код ће исписати: „Ниске нису једнаке.“ јер str1
и str2
нису идентичне.
Метода operator==
Метода operator==
се може користити за проверу да ли су две ниске идентичне, слично као и оператор ==
за основни тип података.
cpp
#include <iostream>
#include <string>
int main() {
std::string str1 = "Zdravo";
std::string str2 = "zdravo";
if (str1 == str2) {
std::cout << "Ниске су једнаке." << std::endl;
} else {
std::cout << "Ниске нису једнаке." << std::endl;
}
return 0;
}
Овај код ће исписати: „Ниске нису једнаке.“ јер str1
и str2
нису идентичне.
Методе operator!=
, operator<
, operator>
, operator<=
, operator>=
Класа string
такође нуди операторе operator!=
, operator<
, operator>
, operator<=
, operator>=
за упоређивање ниски.
* str1 != str2
: Ниске str1
и str2
нису једнаке.
* str1 < str2
: Ниска str1
је лексичког реда пре ниске str2
.
* str1 > str2
: Ниска str1
је лексичког реда после ниске str2
.
* str1 <= str2
: Ниска str1
је лексичког реда пре или једнака ниски str2
.
* str1 >= str2
: Ниска str1
је лексичког реда после или једнака ниски str2
.
cpp
#include <iostream>
#include <string>
int main() {
std::string str1 = "Zdravo";
std::string str2 = "zdravo";
if (str1 < str2) {
std::cout << "str1 је лексичког реда пре str2." << std::endl;
} else {
std::cout << "str1 није лексичког реда пре str2." << std::endl;
}
return 0;
}
Овај код ће исписати: „str1 није лексичког реда пре str2.“ јер str1
је лексичког реда после str2
.
Закључак
Постоји више начина за упоређивање ниски у C++-у, сваки са својим предностима и манама. Оператор ==
је једноставан, али има ограничења. Функција strcmp()
је флексибилнија, али може бити компликованија за коришћење. Класа string
нуди богату колекцију метода за упоређивање ниски, што олакшава рад са нискама.
Важно је изабрати метод који најбоље одговара вашим потребама и да се упознате са његовим карактеристикама. Ове информације ће вам помоћи да ефикасно управљате нискама у вашим C++ програмима.
Честа питања
1. Шта је лексичког реда?
Лексичког реда је редослед у коме се ниске сортирају у речнику. На пример, „а“ је лексичког реда пре „б“, а „Здраво“ је лексичког реда пре „Злато“.
2. Која је разлика између strcmp()
и stricmp()
?
strcmp()
је осетљив на велика и мала слова, док stricmp()
није.
3. Како се упоређују ниске са различитим дужинама?
Упоређивање се врши карактер по карактер, док се не дође до краја краће ниске. Ако су све карактере једнаке, краћа ниска је лексичког реда пре дуже.
4. Да ли је string
класа боља од char
низова?
Класа string
нуди више функција и сигурност у коришћењу од char
низова. Међутим, char
низови могу бити ефикаснији у појединим случајевима.
5. Како се упоређују ниске са специјалним карактерима?
Упоређивање са специјалним карактерима зависи од кодирања карактера које се користи.
6. Шта је std::string
и где се користи?
std::string
је класа која се користи за представљање ниски у C++-у. Она нуди сигурност, функционалност и ефикасност у раду са нискама.
7. Шта је strcmp()
и како се може користити за упоређивање ниски?
strcmp()
је функција која се користи за упоређивање ниски и враћа цели број који представља резултат упоређивања.
8. Како се може користити оператор ==
за упоређивање ниски у C++-у?
Оператор ==
се може користити за проверу да ли су две ниске идентичне.
9. Како се могу упоредити ниске са различитим кодирањем карактера?
За упоређивање ниски са различитим кодирањем карактера, може се користити функција wcscoll()
која је осетљива на локализацију.
10. Где могу да пронађем више информација о коришћењу ниски у C++-у?
Више информација можете наћи у документацији за C++ програмски језик.
Tags: C++, string, comparison, strcmp, compare, operator==, operator!=, operator<, operator>, operator<=, operator>=, string comparison, ниске, упоређивање, C++ ниске, C++ програмски језик, функције за упоређивање, C++ компајлер, C++ документација, ниске у C++, лексичког реда, кодирање карактера, локализација
Links:
* C++ документација
* C++ Tutorial – Strings
* C++ String Comparison