C++ String Comparison


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>

int main() {
   const char* str1 = "hello";
   const char* str2 = "Tutorialspoint Learner";

   int result = strcmp(str1, str2);

   if (result < 0) {
      std::cout << "str1 is less than str2\n";
   } else if (result > 0) {
      std::cout << "str1 is greater than str2\n";
   } else {
      std::cout << "str1 is equal to str2\n";
   }

   return 0;
}

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>

int main() {
   const char* str1 = "hello";
   const char* 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";
   } else if (result > 0) {
      std::cout << "str1 is greater than str2\n";
   } else {
      std::cout << "str1 is equal to str2\n";
   }

   return 0;
}

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>

int main() {
   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)

   return 0;
}

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>

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

   std::cout << str1.compare(str2) << std::endl; 
   std::cout << str1.compare("apple") << std::endl; 

   return 0;
}

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.
Advertisements
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy