【带头学C++】----- 五、字符串操作函数 ---- 5.1 字符串操作函数

5.1字符串操作函数(以str开头的字符串处理函数默认遇到'\0'结束操作)

5.1.1 测量字符串的长度strlen()

strlen() 函数用于计算一个字符串的长度。

#include <string.h> //注意:该头文件必须包含

size_t strlen(const char *s);

// s指的是需要测量字符串的首地址

例:

char str[] = "Hello";
int length = strlen(str);  // length 等于 5

 

遇到  '\0' 表示字符串的结尾,计算长度不包含该标志符号

例如:

 

5.1.2 字符串拷贝函数strcpy

1.strcpy或者strcpy_s将指定的字符串复制到目地地址

#include <string.h>
char *strcpy(char *dest,Tconst char *src);
char *strncpy(char *dest,const char *src,size_t n);
dest:目的空间地址
src: 原字符串的首元素地址

这个比较常用,经常会在一些项目中使用到。

案例:

注意:此时我使用的qt5.13.2对这个函数进行了警告:warning: 'strcpy' is deprecated: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

        这个警告信息是由于strcpy()函数被标记为不安全的,并且在一些编译环境中被认为是不建议使用的。如果你希望消除这个警告,可以考虑使用更安全的函数strcpy_s(C++11引入)

此时就没有警告信息了

2.strncpy 将指定长度的字符串复制到目标字符串

strncpy 函数用于将指定长度的字符串复制到目标字符串中。它的原型如下:

char *strncpy(char *destination, const char *source, size_t num);
  • destination:目标字符串,即要将源字符串复制到的位置。
  • source:源字符串,即要被复制的字符串。
  • num:要复制的字符数的最大限制。

strncpy 函数会将 source 中的最多 num 个字符复制到 destination 中,并且添加一个 null 字符,以确保目标字符串以 null 结尾。如果 source 的长度小于 num,那么 destination 中剩余的位置会被填充为 null 字符。

这个函数可用于避免 strcpy 和 strcpy_s 中的潜在缓冲区溢出问题,因为它允许你指定要复制的最大字符数。

以下是一个使用 strncpy 函数的示例:

#include <cstring>

int main() {
    char source[] = "Hello, world!";
    char destination[20];

    strncpy(destination, source, 10);  // 将 source 中的最多 10 个字符复制到 destination 中
    destination[10] = '\0';  // 手动添加 null 字符,以确保字符串结束

    return 0;
}

在这个示例中,source 中的最多 10 个字符被复制到 destination 中。为了确保 destination 以 null 结尾,我们手动添加了 null 字符。

 5.1.3 字符串追加函数strcat

在C++中,字符串追加函数是strcat()。该函数用于将一个字符串追加到另一个字符串的末尾。以下是strcat()函数的基本用法:

#include <cstring>  // 包含头文件以使用strcat函数

char str1[20] = "Hello, ";
char str2[] = "world!";

strcat(str1, str2);

在这个例子中,str1是目标字符串,str2是我们想要追加到str1末尾的源字符串。strcat()函数将str2中的内容追加到str1的末尾,结果会保存在str1中。

需要注意的是,为了能够容纳目标字符串和源字符串的合并,目标字符串数组str1必须足够大。

另外,C++标准库中的string类也提供了更安全和方便的字符串操作方法,推荐在C++中使用string类来处理字符串。使用string类,字符串追加可以通过运算符+来完成,例如:

#include <string>

std::string str1 = "Hello, ";
std::string str2 = "world!";

std::string result = str1 + str2;

使用string类,我们可以直接使用+运算符将两个字符串合并,并将结果保存在新的string对象result中。这种方式更为直观和安全。

5.1.4 字符串比较strcmp

C++中,可以使用strcmp()函数来比较两个字符串。该函数用于按照字典顺序比较两个字符串,并返回一个整数值来表示比较的结果。

strcmp()函数的原型如下:

int strcmp(const char *str1, const char *str2);
int strncmp(const char *str1, const char *str2, size_t n);//根据n长度比较
  • str1:要比较的第一个字符串。
  • str2:要比较的第二个字符串。

函数返回值:

  • 如果str1小于str2,则返回一个负整数。
  • 如果str1等于str2,则返回0。
  • 如果str1大于str2,则返回一个正整数。

以下是strcmp()函数的一个简单示例:

#include <string>  // 包含头文件以使用strcmp函数

const char *str1 = "apple";
const char *str2 = "banana";
int result = strcmp(str1, str2);

if (result < 0) {
    // str1 小于 str2
} else if (result > 0) {
    // str1 大于 str2
} else {
    // str1 等于 str2
}

在这个示例中,strcmp()函数将比较str1str2的字典顺序,并将结果保存在result中。根据result的值,我们可以判断str1str2的大小关系。

需要注意的是,C++标准库中的string类也提供了比较字符串的方法,如果在C++中使用string类来表示字符串,可以通过<<=>>===!=等运算符来比较字符串,从而使比较更直观和易读。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/139647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【T690 之十一】基于方寸EVB2开发板,结合 Eclipse+gdb+gdbserver 调试 CCAT 的流程总结

目录 1. 准备工作1.1 Eclipse1.2 工程编译1.3 烧写固件 2. 创建工程2.1 搭建调试工程2.2 配置Dbug调试信息 3. 调试4. 手动调试过程4. 总结 备注&#xff1a; 1&#xff0c;假设您已对方寸微电子的T690系列芯片的使用方式都有了一定的了解&#xff0c;可以根据此文的配置进行Li…

前端中 JS 发起的请求可以暂停吗?

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 这个问题非常有意思&#xff0c;我一看到就想了很多可以回复的答案&#xff0c;但是评论区太窄&#xff0c;就直接开…

印刷包装服务预约小程序的作用是什么

印刷包装厂家非常多&#xff0c;其主要服务为名片印刷、礼品纸袋定制、画册宣传单印刷等&#xff0c;这些服务对大多数企业都有很高的需求&#xff0c;同时具备批量、长期合作属性&#xff0c;同时具备跨区域合作性&#xff0c;所以品牌可扩展度高。 但高需求的同时&#xff0…

查询数据表格中的数据

1.创建这个表至少20个 1&#xff09;创建数据库&#xff1a;create database 四川信息职业技术; 2&#xff09;创建数据表 3&#xff09;插入数据&#xff08;第一条代码修改了一下手机号码的字段类型&#xff09; 2.统计表中的人数 如果你想根据某个特定的列来统计人数&…

mysql、mysql+python

一、 window端mysql免费版&#xff1a; &#xff08;未特别描述则不做更改直接点下一步&#xff09; 下载地址&#xff1a;https://downloads.mysql.com/archives/installer mysql安装好后添加path&#xff1a; 将MySQL安装目录的bin文件夹的路径复制&#xff0c;点新建添加…

C++:对象成员方法的使用

首先复习一下const : //const: //Complex* const pthis1 &ca; //约束指针自身 不能指向其他对象 // pthis1 &cb; err //pthis1->real; //const Complex* const pthis1 &ca;//指针指向 指针自身 都不能改 //pthis1->real; 只可读 …

算法细节类错误

1.使用全局变量时&#xff0c;若有多组测试数据 应该注意在循坏中重新初始化全局变量 例如&#xff1a;

ehcart散点图x轴不按照顺序排列的问题

如图所示&#xff0c;一开始我x轴用的type为category&#xff0c;所以导致x轴的顺序是乱的&#xff0c;如下所示&#xff1a; 后来去官网看了下文档&#xff0c;才知道只需要type改成value就可以了&#xff01;&#xff01;&#xff01;差点就去写for循环排序了呀

大数据之LibrA数据库系统告警处理(ALM-12033 慢盘故障)

告警解释 系统每一秒执行一次iostat命令&#xff0c;监控磁盘I/O的系统指标&#xff0c;如果在60s内&#xff0c;svctm大于100ms的周期数大于30次则认为磁盘有问题&#xff0c;产生该告警。 更换磁盘后&#xff0c;告警自动恢复。 告警属性 告警ID 告警级别 可自动清除 1…

大咖直播间”系列直播课第一期——如何抓住HarmonyOS带来的机遇?

想了解#HarmonyOS#背后隐藏着怎样的商业机遇&#xff1f; 想成功搭上万物互联快车&#xff0c;与HarmonyOS一起发展壮大&#xff1f; 想知道开发者应该怎样把握时代机遇&#xff0c;实现高质高效就业&#xff1f; 答案尽在#华为开发者学堂#《大咖直播间》第一期课程&#xff0c…

VMware配置NAT模式网络

一、选择VMWare的NAT模式。 1&#xff09;导航栏“编辑”->“虚拟网络编辑器” ->NAT模式->NAT设置 记住NAT设置中的子网IP、子网掩码、网关IP三项&#xff0c;接下来配置文件主要是这三项。 嗯&#xff0c;这里记得按确定&#xff0c;我之前没有按确定写好配置后还…

世微 降压恒流 12V 5A 一切一双灯 LED汽车大灯驱动方案 AP5191

AP5191是一款PWM工作模式,高效率、外围简 单、内置功率MOS管&#xff0c;适用于4.5-150V输入的高 精度降压LED恒流驱动芯片。输出功率150W&#xff0c; 电流6A。 AP5191可实现线性调光和PWM调光&#xff0c;线性调 光脚有效电压范围0.55-2.6V. AP5191 工作频率可以通过RT 外部…

低代码平台如何提高开发效率?

目录 一、开发工具&#xff1a;JNPF 二、产品分析 1可视化应用开发 2流程管理 3特别支持整个平台源码合作 三、使用技巧 四、总结 在当今快速发展的软件开发领域&#xff0c;提高生产效率和质量是每个开发团队追求的目标。JNPF&#xff08;Java Non-Enterprise Applicat…

EM@一次双绝对值不等式

文章目录 一次双绝对值不等式求解步骤去绝对值情况分析&#x1f47a;例例代数法几何方法比较 例 一次双绝对值不等式求解步骤 设 f ∣ f 1 ∣ ∣ f 2 ∣ f|f_1||f_2| f∣f1​∣∣f2​∣, f 1 , f 2 f_1,f_2 f1​,f2​都是一次多项式,则原不等式 f ⩾ a f\geqslant{a} f⩾a或 …

RocketMQ基本概念

RocketMQ基本概念 前言RocketMQ中的基本概念主题&#xff08;Topic&#xff09;标签&#xff08;Tag&#xff09; 生产者&#xff08;Producer&#xff09;生产者组&#xff08;Producer-Group&#xff09; 消费者 &#xff08;Consumer&#xff09;消费者组&#xff08;Consum…

数据结构--图解单链表

学习链表最重要的就是会画图&#xff0c;尤其是要理解链表的逻辑结构和物理结构&#xff0c;理解链表的底层原理才能使用的如鱼得水。 希望这篇文章可以帮助各位&#xff0c;记得关注收藏哦&#xff1b;若发现问题希望私信博主&#xff0c;十分感谢。 当然学习链表是需要大家对…

分享一些有趣的MATLAB提示音(代码可直接复制)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

江门車馬炮汽车金融中心 11月11日开张

江门车马炮汽车金融中心于11月11日正式开张&#xff0c;这是江门市汽车金融服务平台&#xff0c;旨在为广大车主提供更加便捷、高效的汽车金融服务。 江门市作为广东省的一个经济发达城市&#xff0c;汽车保有量持续增长&#xff0c;但车主在购车、用车、养车等方面仍存在诸多不…

JSON.parse --- 搜索框

一 &#xff0c; JSON.parse this.num_normsTwo JSON.parse(res.result.normsTwo) 二. 搜索框 <template><div class"app-container"><span style"margin-left:120px;margin-right: 20px;width: 100px; display: inline-block;">物…