C++ string comparison refers to the process of evaluating two strings to determine their equality or their order based on lexicographical rules.
String comparison can be done by using built-in operators such as ==, !=, <, and > or by the compare() method. But by default these comparisons are case-sensitive, which means “tutorial point” and “Tutorial point” are considered different. String comparison plays an important role in performing tasks like sorting, searching, and input validation.
Types of String in C++
Basically there are two primary types of string in C++ −
- C-style strings − This string in C++ is an array of characters with a null character (‘\0’).
- std::string − This string is a part of the C++ Standard Library which provides a more robust and user-friendly way to handle strings because it manages memory automatically, allows dynamic resizing, and provides a vast set of member functions for manipulation like concatenation, substring extraction, and searching.
Comparing C-Style Strings
Here’s how you can compare C-style strings −
1. strcmp()
You can use the strcmp() function from the <cstring> library to compare two strings.
Example
Heres a given example showing a comparison between two C-style strings −
#include <iostream>#include <cstring>intmain(){constchar* str1 ="hello";constchar* str2 ="Tutorialspoint Learner";int result =strcmp(str1, str2);if(result <0){
std::cout <<"str1 is less than str2\n";}elseif(result >0){
std::cout <<"str1 is greater than str2\n";}else{
std::cout <<"str1 is equal to str2\n";}return0;}
Output
str1 is greater than str2
Explanation
- The strcmp function compares the two strings and returns negative (str1 < str2), zero(str1 = str2) and positive(str1 > str2).
- In this case, “hello” is lexicographically greater than “Tutorialspoint Learner”, so the output is “str1 is greater than str2”.
- In lexicographical order, strings are compared character by character based on their ASCII values, where ‘h’ (ASCII 104) and ‘T’ (ASCII 84)
- So 104 > 84 then this comparison resulted in “hello” being greater than “Tutorialspoint Learner”.
2. strcoll()
The strcoll() function compares two C-strings according to the current locale, which is useful for internationalization. It behaves similarly to strcmp() but takes into account locale-specific rules.
Example
#include <iostream>#include <cstring>#include <locale>intmain(){constchar* str1 ="hello";constchar* str2 ="Tutorialspoint Learner";// Set the locale (optional, depends on your environment)
std::setlocale(LC_COLLATE,"en_US.UTF-8");int result =strcoll(str1, str2);if(result <0){
std::cout <<"str1 is less than str2\n";}elseif(result >0){
std::cout <<"str1 is greater than str2\n";}else{
std::cout <<"str1 is equal to str2\n";}return0;}
Output
str1 is greater than str2
Explanation
- The std::setlocale() function sets the locale for string collation (comparison) to “en_US.UTF-8”, which is the U.S. English locale.
- The strcoll() function compares str1 and str2 according to the current locale.
- It returns a “-ve” value if str1 < str2, 0 if they are equal, and a “+ve” value if str1 > str2.
- Since ‘h’ (ASCII 104) > ‘T’ (ASCII 84) therefor output is ‘h’ is greater than ‘T’.
Comparing std::string
In C++ for comparing std::string objects have various methods that give different ways of accessing their equality or relative order.
1. Comparison Operators
Comparison operators give access to compare two std::string objects directly.
This comparison is also done lexicographically which means characters are compared based on their ASCII values. These are the following −
- == (Equality)
- != (Inequality)
- < (Less than)
- > (Greater than)
- <= (Less than or equal to)
- >= (Greater than or equal to)
Example
#include <iostream>#include <string>intmain(){
std::string str1 ="Allen";
std::string str2 ="allen";
std::cout <<(str1 == str2)<< std::endl;// false (0)
std::cout <<(str1 != str2)<< std::endl;// true (1)
std::cout <<(str1 < str2)<< std::endl;// true (1)
std::cout <<(str1 > str2)<< std::endl;// false (0)return0;}
Output
0 1 1 0
Explanation
Since the ASCII value of A (65) is less than a (97), So receiving output accordingly.
2. std::string::compare() Method
The std::string::compare() method is also used to compare the value of two strings. It returns an integer value based on the lexicographical comparison.
- 0: if both strings are equal
- > 0 (+ve) : if the first string is greater
- < 0 (-ve) : if the first string is lesser
Example
#include <iostream>#include <string>intmain(){
std::string str1 ="apple";
std::string str2 ="banana";
std::cout << str1.compare(str2)<< std::endl;
std::cout << str1.compare("apple")<< std::endl;return0;}
Output
-1 0
Explanation
- At first, since ‘a’ (ASCII 97) is less than ‘b’ (ASCII 98) so output is a negative number (-1).
- In the second, the output is 0 as values stored in str1 and “apple” are the same.
Leave a Reply