0

0

c++中如何判断字符串相等_c++比较两个字符串的方法【指南】

冰火之心

冰火之心

发布时间:2026-01-19 14:46:04

|

706人浏览过

|

来源于php中文网

原创

用 == 比较 std::string 最安全直接,它已重载为字典序内容比较;与 const char* 比较需确保非 nullptr;不区分大小写需手动处理;compare() 适用于三态结果或子串比较。

c++中如何判断字符串相等_c++比较两个字符串的方法【指南】

== 比较 std::string 是最安全直接的方式

只要两个变量都是 std::string 类型,直接用 == 就行,它已重载为按字典序逐字符比较内容,不是比较地址。这是 C++ 标准库设计的本意,无需手动遍历或调用函数。

常见错误是误以为要像 C 那样用 strcmp,或者把 std::string 和 C 风格字符串混用后还硬套 ==——这时候会编译失败或行为异常。

std::string a = "hello";
std::string b = "hello";
if (a == b) {  // ✅ 正确,语义清晰,效率高
    // ...
}

比较 std::string 和 C 风格字符串(const char*)要小心隐式转换

std::string== 运算符重载支持与 const char* 比较,但前提是右侧不能是 nullptr,否则行为未定义(多数实现会崩溃)。编译器不会报错,运行时才出问题。

  • ✅ 安全写法:s == "abc""abc" == s(字面量非空)
  • ⚠️ 危险写法:s == ptr,其中 ptr 可能为 nullptr
  • ? 补救方式:先判空再比较,或用 s.compare(ptr) == 0comparenullptr 抛异常,更易定位)

区分大小写的比较就用 ==,不区分大小写得自己处理

C++ 标准库没有内置的不区分大小写比较操作符或函数。别试图用 std::tolower 遍历每个字符——它依赖本地 locale,且对非 ASCII 字符(如中文、UTF-8 多字节)完全无效。

Runway
Runway

Runway是一个AI创意工具平台,它提供了一系列强大的功能,旨在帮助用户在视觉内容创作、设计和开发过程中提高效率和创新能力。

下载

立即学习C++免费学习笔记(深入)”;

真正可靠的方案只有两种:

  • 若确定是纯 ASCII:转成小写再比,例如用 std::transform + std::tolower(注意传 unsigned char
  • 若需支持国际化:用 ICU 库或 C++20 的 std::ranges::equal 配合自定义谓词,但工程中更常见的是用第三方轻量方案(如 Boost.Algorithm 的 iequals
// 简单 ASCII 不区分大小写比较示例(不推荐用于生产)
std::string lower(std::string s) {
    std::transform(s.begin(), s.end(), s.begin(),
                   [](unsigned char c) { return std::tolower(c); });
    return s;
}
if (lower(a) == lower(b)) { ... }

compare() 的场景:需要三态结果或子串比较

== 只能回答“是否相等”,而 std::string::compare() 返回 int:负数表示小于,0 表示等于,正数表示大于。当你需要排序逻辑、或只比前 N 个字符、或从某位置开始比时,必须用它。

  • s.compare(t) == 0 等价于 s == t,但更啰嗦,无必要
  • s.compare(0, 3, "abc") == 0:检查 s 前 3 个字符是否为 "abc"
  • s.compare(pos, len, t) == 0:从 pos 开始取 len 个字符和 t 比较
  • 注意:越界参数(如 pos > s.length())会抛 std::out_of_range
C++ 字符串比较的坑不在语法,而在类型混用和边界假设——比如把 char*std::string 用、忽略 nullptr、或默认 compare 能处理大小写。这些地方一错就是运行时崩溃或逻辑错位,而且不容易在单元测试里覆盖到。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

318

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1468

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

85

2025.10.17

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

524

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

258

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

208

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1468

2023.10.24

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.9万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号