讲师中心 微信公众号
AI工具推荐 视频效率加速

C++ string compare用法 C++字符串字典序比较返回值含义【文档】

梦辰吖_9852

梦辰吖_9852

发布时间:2026-02-01 15:37:50

|

726人浏览过

|

来源于php中文网

原创

std::string::compare 返回int:小于0表示调用对象字典序小于参数,等于0表示相等,大于0表示大于参数;其设计兼容strcmp,适用于排序,但不可直接用于布尔判断。

c++ string compare用法 c++字符串字典序比较返回值含义【文档】

compare 函数返回值到底代表什么

std::string::compare 不返回布尔值,也不直接告诉你“相等”或“不相等”,它返回一个 int:小于 0 表示调用对象字典序**小于**参数,等于 0 表示**相等**,大于 0 表示**大于**参数。这个设计和 C 的 strcmp 一致,方便做排序判断(比如用在 std::sort 的自定义比较器里)。

常见误解是把返回值当 true/false 用:if (s1.compare(s2)) —— 这样写逻辑反了:相等时返回 0(即 false),不等时反而非零(true),容易写出 bug。

compare 的五种重载形式怎么选

最常用的是全字符串比较:s1.compare(s2);但实际中常需比子串或混合类型,得看参数类型匹配:

  • s1.compare(pos1, len1, s2):从 s1 下标 pos1 开始取最多 len1 个字符,与整个 s2 比较
  • s1.compare(pos1, len1, s2, pos2, len2):两边都截取,注意 len2 是 s2 中的长度,不是下标
  • s1.compare("abc"):C 风格字符串,隐式转 std::string_view(C++17 起)或构造临时 string
  • s1.compare(0, std::string::npos, s2) 等价于 s1.compare(s2),npos 表示“到末尾”

注意:如果 pos1 >= s1.length(),会抛 std::out_of_range;而 len1 超出范围会被自动截断,不会报错。

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

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

和 ==、 运算符比有什么区别

语义上完全等价:s1 == s2 和 s1.compare(s2) == 0 效果一样;s1 和 <code>s1.compare(s2) 也一样。但关键差异在性能和场景:

  • 运算符重载更简洁、可读性高,日常判等/大小关系优先用 == 或
  • compare 适合需要**一次调用获取完整顺序信息**的场合,比如实现 operator(C++20)、写 std::map 的比较器、或避免多次调用(如先判等再判大小)
  • 部分老代码或跨语言接口(如封装 C 库)会强制要求返回 int,这时必须用 compare

性能上无实质差别,现代编译器对两者优化程度接近,不必为“效率”刻意选 compare。

容易踩的坑:npos、空字符串、UTF-8 字节序

compare 是纯字节比较,不理解 UTF-8 编码逻辑。比如两个中文字符串若用 UTF-8 存储,"你好".compare("世界") 比的是 UTF-8 字节序列,结果符合 Unicode 码点顺序,但不是“按汉字笔画”或“拼音”排——这是常见误以为“字典序=自然语言序”的根源。

  • 传 std::string::npos 作 len 参数没问题,但作 pos 就会越界(npos 是极大值,远超任何合法下标)
  • 空字符串 "" 比任何非空字符串都小,"".compare("a") 返回负数
  • 如果字符串含嵌入 null 字节(\0),compare 仍会比较到末尾(因为 std::string 是 length-aware 的),但 compare("abc\0d", "abc") 会把 \0 当普通字符处理

真正要做国际化排序,得用 std::locale 或 ICU 库,compare 做不了。

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
string转int
string转int

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

6679

2023.08.02

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

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

6164

2023.10.24

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

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

3104

2024.02.23

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

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

1812

2025.10.17

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1138

2023.09.04

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

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

1798

2023.08.03

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

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

2824

2023.09.04

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

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

6164

2023.10.24

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

80

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn