C++ 字符串比较


C++ 字符串比较是指根据词典规则评估两个字符串以确定它们是否相等或它们的顺序的过程。

字符串比较可以使用内置运算符(例如==!=<>)或compare() 方法来完成。但默认情况下,这些比较区分大小写,这意味着“tutorial point”和“Tutorial point”被认为是不同的。字符串比较在执行排序、搜索和输入验证等任务中起着重要作用。

C++ 中的字符串类型

基本上,C++ 中主要有两种类型的字符串:

  • C 风格字符串 − C++ 中的这种字符串是带有空字符('\0') 的字符数组。
  • std::string − 这种字符串是 C++ 标准库的一部分,它提供了一种更强大且用户友好的方式来处理字符串,因为它自动管理内存,允许动态调整大小,并提供大量用于操作的成员函数,例如连接、子串提取和搜索。

比较 C 风格字符串

以下是比较 C 风格字符串的方法:

1. strcmp()

您可以使用strcmp() 函数(来自<cstring> 库)来比较两个字符串。

示例

以下是一个比较两个 C 风格字符串的示例:

#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;
}

输出

str1 is greater than str2

解释

  • strcmp 函数比较两个字符串,并返回负数 (str1 < str2)、零 (str1 = str2) 和正数 (str1 > str2)。
  • 在这种情况下,“hello”在词典顺序上大于“Tutorialspoint Learner”,因此输出为“str1 大于 str2”。
  • 在词典顺序中,字符串是基于其 ASCII 值逐个字符进行比较的,其中 'h' (ASCII 104) 和 'T' (ASCII 84)
  • 所以 104 > 84,因此此比较导致“hello”大于“Tutorialspoint Learner”。

2. strcoll()

strcoll() 函数 根据当前区域设置比较两个 C 字符串,这对于国际化很有用。它的行为类似于 strcmp(),但考虑了特定于区域设置的规则。

示例

#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;
}

输出

str1 is greater than str2

解释

  • std::setlocale() 函数将字符串排序 (比较) 的区域设置设置为 "en_US.UTF-8",这是美国英语区域设置。
  • strcoll() 函数根据当前区域设置比较 str1 和 str2。
  • 如果 str1 < str2,则返回“-ve”值;如果它们相等,则返回 0;如果 str1 > str2,则返回“+ve”值。
  • 由于 'h' (ASCII 104) > 'T' (ASCII 84),因此输出为 'h' 大于 'T'。

比较 std::string

在 C++ 中,比较std::string 对象有各种方法,这些方法提供了访问其相等性或相对顺序的不同方法。

1. 比较运算符

比较运算符可以直接比较两个std::string 对象。

此比较也是按词典顺序进行的,这意味着字符是根据其 ASCII 值进行比较的。以下是以下内容:

  • == (相等)
  • != (不相等)
  • < (小于)
  • > (大于)
  • <= (小于或等于)
  • >= (大于或等于)

示例

#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;
}

输出

0
1
1
0

解释

由于A (65) 的 ASCII 值小于a (97),因此相应地接收输出。

2. std::string::compare() 方法

std::string::compare() 方法也用于比较两个字符串的值。它根据词典比较返回一个整数值。

  • 0:如果两个字符串相等
  • > 0 (+ve):如果第一个字符串更大
  • < 0 (-ve):如果第一个字符串更小

示例

#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;
}

输出

-1
0

解释

  • 首先,由于 'a' (ASCII 97) 小于 'b' (ASCII 98),所以输出为负数 (-1)。
  • 其次,输出为 0,因为存储在 str1 和“apple”中的值相同。
广告