C++ 基础

C++ 主页 C++ 概述 C++ 环境设置 C++ 基本语法 C++ 注释 C++ Hello World C++ 省略命名空间 C++ 标记 C++ 常量/字面量 C++ 关键字 C++ 标识符 C++ 数据类型 C++ 数字数据类型 C++ 字符数据类型 C++ 布尔数据类型 C++ 变量类型 C++ 变量作用域 C++ 多变量 C++ 基本输入/输出 C++ 修饰符类型 C++ 存储类 C++ 数字 C++ 枚举 C++ 枚举类 C++ 引用 C++ 日期和时间

C++ 运算符

C++ 运算符 C++ 算术运算符 C++ 关系运算符 C++ 逻辑运算符 C++ 位运算符 C++ 赋值运算符 C++ sizeof 运算符 C++ 条件运算符 C++ 逗号运算符 C++ 成员运算符 C++ 强制类型转换运算符 C++ 指针运算符 C++ 运算符优先级 C++ 一元运算符

C++ 控制语句

C++ 决策语句 C++ if 语句 C++ if else 语句 C++ 嵌套 if 语句 C++ switch 语句 C++ 嵌套 switch语句 C++ 循环类型 C++ while 循环 C++ for 循环 C++ do while 循环 C++ Foreach 循环 C++ 嵌套循环 C++ break 语句 C++ continue 语句 C++ goto 语句

C++ 字符串

C++ 字符串 C++ 循环遍历字符串 C++ 字符串长度 C++ 字符串连接 C++ 字符串比较

C++ 函数

C++ 函数 C++ 多函数参数 C++ 递归函数 C++ 返回值 C++ 函数重载 C++ 函数重写 C++ 默认参数

C++ 数组

C++ 数组 C++ 多维数组 C++ 指向数组的指针 C++ 将数组传递给函数 C++ 从函数返回数组

C++ 结构 &联合

C++ 结构 C++ 联合

C++ 指针

C++ 指针 C++ 解引用 C++ 修改指针

C++ 类和对象

C++ 面向对象 C++ 类 &对象 C++ 类成员函数 C++ 类访问修饰符 C++ 静态类成员 C++ 静态数据成员 C++ 静态成员函数 C++ 内联函数 C++ this 指针 C++ 友元函数 C++ 指向类的指针

C++ 构造函数

C++ 构造函数 &析构函数 C++ 默认构造函数 C++ 参数化构造函数 C++ 复制构造函数 C++ 构造函数重载 C++ 带默认参数的构造函数 C++ 委托构造函数 C++ 构造函数初始化列表 C++ 使用构造函数动态初始化

C++ 继承

C++ 继承 C++ 多重继承 C++ 多级继承

C++ 面向对象

C++ 重载 C++ 多态性 C++ 抽象 C++ 封装 C++ 接口 C++ 虚函数 C++ 纯虚函数与抽象类

C++ 文件处理

C++ 文件和流 C++ 文件读取

C++ 进阶

C++ 异常处理 C++ 动态内存 C++ 命名空间 C++ 模板 C++ 预处理器 C++ 信号处理 C++ 多线程 C++ Web 编程 C++ 套接字编程 C++ 并发 C++ 高级概念 C++ Lambda 表达式 C++ unordered_multiset

C++ 实用资源

C++ 问答 C++ 快速指南 C++ 速查表 C++ STL 教程 C++ 标准库 C++ 实用资源 C++ 讨论


C++ 字符串比较

C++ 字符串比较是指对两个字符串进行求值,以确定它们是否相等或根据字典序排序的过程。

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

C++ 中的字符串类型

C++ 中主要有两种字符串类型 -

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

比较 C 风格字符串

以下是如何比较 C 风格字符串−

1. strcmp()

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

示例

以下示例展示了两个 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";
   } else if (result > 0) {
      std::cout << "str1 is greater than str2";
   } else {
      std::cout << "str1 is equal to str2";
   }

   return 0;
}

输出

str1 is greater than str2

解释

  • strcmp 函数比较两个字符串,并返回负数 (str1 < str2)、零 (str1 = str2) 和正数 (str1 > str2)。
  • 在本例中,按字典顺序排列的字符串"hello"大于"Tutorialspoint Learner",因此输出为"str1 is greater than 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";

  // 设置语言环境(可选,取决于您的环境)
   std::setlocale(LC_COLLATE, "en_US.UTF-8");

   int result = strcoll(str1, str2);

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

   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)。
  • 其次,由于 str1 和 "apple" 中存储的值相同,因此输出为 0。