当前位置: 首页 > news >正文

【和春笋一起学C++】字符串比较

目录

C语言字符串比较

C语言字符比较

C++字符串比较


C语言字符串比较

在C语言中用于比较字符串的函数为strcmp函数,该函数定义在头文件<string.h>中,是一个标准库函数。strcmp函数的工作原理是逐字符比较两个字符串,直到找到不同的字符或遇到空符'\0'为止。函数的声明如下:

int strcmp(const char *s1, const char *s2);

函数接受两个字符串地址作为参数,即参数可以是指针字符串常量字符数组名

函数返回值:

  1. 如果两个字符串相同,函数返回0;
  2. 如果第一个字符串按字母顺序排在第二个字符串之前,函数返回一个负数值;
  3. 如果第一个字符串按字母顺序排在第二个字符串之后,函数返回一个正数值;

注意:C++中大写字母和小写字母的ASCII码不同,小写字母的编码比大写字母大。如果两个相同的字符串,一个小写一个大写,则strcmp函数将返回一个非零值。

如果str1和str2为字符指针,则函数返回值存在以下关系:

字符串关系表达式表达式值
str1和str2相等strcmp(str1,str2)==0true
str1和str2不相等

strcmp(str1,str2) !=0

strcmp(str1,str2)

都为true
str1在str2的前面strcmp(str1,str2)<0true
str1在str2的后面strcmp(str1,str2)>0true

另外,如果str1和str2为字符数组,如果存储在字符数组中的字符串相同,不管str1和str2两个数组的大小是否相等,strcmp函数都将返回0。因为strcmp函数在逐字符比较时遇到空值字符就停止了。

下面代码为寻找"look"字符串的一个字符串比较实例,并输出遍历寻找过程中的所有字符串。

#include <iostream>
#include <cstring>
using namespace std;
int main()
{char word[5] = "?ook";for (char ch = 'a'; strcmp(word, "look"); ch++){cout << word << endl;word[0] = ch;}cout << "End string is: " << word;return 0;
}

输出结果: 

代码说明:

  • 初始化数组时,设置数组的大小为5,这是因为字符串"?ook"最后需要加上一个空值字符来作为字符串的结束标志。 
  • 当使用ASCII字符编码集时,从a到z的字母的编码是连续的,所以可以使用递增操作符来遍历所有的字母。

C语言字符比较

C语言中虽然不能用关系操作符来比较字符串,但可以用它来比较字符,因为字符实际上是整型,下面代码为输出所有的字母。

#include <iostream>
#include <cstring>
using namespace std;
int main()
{for (char ch= 'a';ch<='z';ch++){cout << ch << "  ";}return 0;
}

C++字符串比较

C语句中不能用关系操作符比较字符串,但C++中的string类对象可以直接使用关系操作符来比较字符串。上面寻找"look"字符串的实例可以直接用关系操作符将string类对象与"look"字符串常量进行比较。

#include <iostream>
#include <cstring>
using namespace std;
int main()
{string word = "?ook";for (char ch= 'a';word!="look";ch++){cout << word << endl;word[0] = ch;}cout << "End string is: " << word;return 0;
}

http://www.lryc.cn/news/505332.html

相关文章:

  • HTTP 协议报文结构 | 返回状态码详解
  • .net winform 实现CSS3.0 泼墨画效果
  • LearnOpenGL学习(高级OpenGL - - 实例化,抗锯齿)
  • 大数据与AI:从分析到预测的跃迁
  • 【CC2530开发基础篇】继电器模块使用
  • C05S07-Tomcat服务架设
  • Java stream groupingBy sorted 实现多条件排序与分组的最佳实践
  • JAVA:代理模式(Proxy Pattern)的技术指南
  • 爬取Q房二手房房源信息
  • Ansible自动化运维(五) 运维实战
  • K-means算法的python实现
  • 客户端(浏览器)vue3本地预览txt,doc,docx,pptx,pdf,xlsx,csv,
  • [SZ901]JTAG高速下载设置(53Mhz)
  • docker springboot 运维部署详细实例
  • Linux 查看目录命令 ls 详细介绍
  • React Native状态管理器Redux、MobX、Context API、useState
  • Three.js资源-模型下载网站
  • linux 添加默认网关
  • 【学习笔记】深入浅出详解Pytorch中的View, reshape, unfold,flatten等方法。
  • CTFHUB-web(SSRF)
  • 分解质因数
  • 前景物体提取
  • Kotlin复习
  • 【AI日记】24.12.17 kaggle 比赛 2-6 | 把做饭看成一种游戏 | 咖喱牛肉
  • 操作系统(14)请求分页
  • uniapp navigateTo、redirectTo、reLaunch等页面路由跳转方法的区别
  • 模型 A/B测试(科学验证)
  • 谷歌发布升级版AI视频生成器Veo 2与图像生成器Imagen 3
  • 快速掌握源码部署Filebeat
  • C++ 哈希表封装unordered_map 和 unordered_set