【探索C++】string类:更强大的字符串处理

  • (꒪ꇴ꒪ ),Hello我是祐言QAQ
  • 我的博客主页:C/C++语言,Linux基础,ARM开发板,软件配置等领域博主🌍
  • 快上🚘,一起学习,让我们成为一个强大的攻城狮!
  • 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

        在C++编程中,有一个强大的工具,它极大地简化了字符串处理,那就是string。与C语言中的字符串相比,string不仅更安全,还提供了更多的功能。本篇博客将详细介绍C++中的string,以及它与C语言字符串的区别,方便大家快速入门C++。

一、 动态分配与自动管理

        在C语言中,字符串是通过字符数组表示的,需要手动管理内存的分配和释放。而在C++中,string动态分配的字符串,它自动处理内存管理,避免了许多内存错误。这就意味着我们无需担心缓冲区溢出和内存泄漏等问题,大大节约开发时间(较小的代码量),也避免了一些不必要的犯错(手动管理内存的复杂性)。

        下面我们就C与C++在内存管理上进行一下代码量对比体会一下动态分配与自动管理。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() {//分配char *dynamicString = (char *)malloc(20 * sizeof(char));strcpy(dynamicString, "Dynamic string handling");//strcpy写入数据printf("%s\n", dynamicString);//打印//再分配dynamicString = realloc(dynamicString, 30 * sizeof(char));strcat(dynamicString, " in C"); //拼接printf("%s\n", dynamicString);//释放free(dynamicString);return 0;
}

        然而在C++中,这些操作将不会在出现,string类将自动处理内存管理,下面让我们来看看C++实现同样的操作所需代码量吧:

#include <iostream>
#include <string>
using namespace std;int main() {//创建字符串string dynamicString = "Dynamic string handling";cout << dynamicString << endl;//输出dynamicString += " in C++"; // 自动扩展字符串长度cout << dynamicString << endl;//再输出return 0;
}

        我天这么少嘛,即使是一个新学C++的同学恐怕也能看懂吧,所以这就是C++被发开的初衷,让编程更简单!

二、长度管理

        C语言中的字符串以NULL终止,需要使用特定的字符(通常是\0)表示字符串的结束,容易出现缓冲区溢出。而C++中的string自带长度信息,不需要显式的NULL终止字符,从而更安全。

         代码:

#include <iostream>
#include <string>
using namespace std;int main() {string s = "Hello, world!";cout << "字符串长度为: " << s.length() << endl;return 0;
}

三、 操作和功能

        C语言中的字符串操作需要调用库函数,例如strcpystrcat等。而C++中的string提供了丰富的成员函数,例如appendinsertsubstr等,使字符串操作更加方便。

         代码:

#include <iostream>
#include <string>
using namespace std;int main() {string s = "Hello";s.append(", world!"); // 追加字符串cout << s << endl;s.insert(5, " there"); // 插入字符串cout << s << endl;s.erase(6, 5); // 删除一部分字符串cout << s << endl;return 0;
}

四、拼接和连接

        C语言中的字符串拼接需要手动分配足够的空间,并使用库函数strcat进行拼接。

char str1[50] = "Hello, ";
char str2[] = "world!";
char result[100];strcpy(result, str1);  // 复制 str1 到 result
strcat(result, str2);  // 连接 str2 到 resultprintf("%s\n", result);  // 输出: Hello, world!

        C++中的string支持直接使用+运算符进行字符串连接,极大地简化了操作。

#include <iostream>
#include <string>
using namespace std;int main() {string str1 = "Hello, ";string str2 = "world!";string result;result = str1 + str2;cout << result << endl;  // 输出: Hello, world!return 0;
}

五、 赋值和复制

        C语言中的字符串赋值需要使用库函数strcpy或逐字符复制。

char source[] = "Hello";
char destination[20];
strcpy(destination, source);

        C++中的string可以直接使用=进行赋值,同时支持深拷贝,不需要手动管理内存。

string source = "Hello";
string dest;
dest = source;

六、 可迭代性

        C语言中的字符串不是容器,难以方便地进行迭代和遍历。

char str[] = "Hello";
for (int i = 0; str[i] != '\0'; i++) {printf("%c\n", str[i]);
}

        C++中的string是标准的容器,支持使用迭代器或范围循环进行遍历。

string str = "Hello";
for (char c : str) {cout << c << endl;
}

七、 扩展性和自定义

        C语言中的字符串操作受限,难以实现更高级的字符串处理。C++中的string允许自定义成员函数和操作,支持更复杂的字符串处理需求。

#include <iostream>    
#include <string>      
using namespace std; // 使用标准命名空间,避免频繁使用std::class MyString : public string {  // 定义一个继承自string的自定义类MyString
public:void customFunction() {      // 定义自定义成员函数customFunctioncout << "Custom function for MyString" << endl;  // 输出自定义信息}
};int main()
{    // 主函数开始MyString customStr = "Custom String";  // 创建一个MyString类型的对象customStr,初始化为"Custom String"cout << customStr << endl;  // 输出customStr的内容customStr.customFunction();  // 调用customFunction方法,输出自定义信息return 0;  // 返回0,表示程序正常结束
}

        通过这篇博客,深入探索了C++中的string,了解了它相较于C语言字符串的优势。string提供了更安全、更方便以及更功能丰富的字符串处理方式,是现代C++编程中的强大工具。无论是拼接、赋值、遍历还是其他字符串操作,string都能显著地提升代码的可读性、可维护性和安全性。在日常的C++开发中,强烈推荐使用string来处理字符串,以获得更好的开发体验。

        更多C语言Linux系统ARM板实战数据结构相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉感谢关注🎉

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统安全:NAT(SNAT、DNAT)

目录 一.NAT 二.SNAT 三.DNAT 一.NAT NAT: network address translation&#xff0c;支持PREROUTING&#xff0c;INPUT&#xff0c;OUTPUT&#xff0c;POSTROUTING四个链 请求报文&#xff1a;修改源/目标IP&#xff0c; 响应报文&#xff1a;修改源/目标IP&#xff0c;根据…

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

[LeetCode111双周赛LeetCode359周赛] DP双指针

参考灵神和闫总的讲解和代码&#xff1a; https://www.bilibili.com/video/BV1rP411s7Z5 https://space.bilibili.com/206214 7006. 销售利润最大化 https://leetcode.cn/problems/maximize-the-profit-as-the-salesman/ Solution 动态规划 哈希表 首先按照 end 的顺序分…

计算CRC16出现两次计算结果不同的问题

传入CRC计算函数的原始数据和长度是一样的&#xff0c;但是前后两次计算的结果竟然不一样。 开发环境是KEIL5&#xff0c;mcu是一个2K/4K SRAM的M0内核的单片机。 找了半天原因&#xff0c;还计算了一下堆栈&#xff1a; 目前在优化等级为-O2时&#xff0c;程序占用flash大小…

【FM-CW雷达】一种通信系统技术——调频连续波信号(FM-CW)(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

人事变动?前沃尔沃汽车大中华区总裁钦培吉将加盟吉利

根据消息&#xff0c;吉利控股集团高级副总裁杨学良在今天上午通过微博宣布&#xff0c;前沃尔沃汽车大中华区总裁钦培吉将加盟吉利。钦培吉将担任吉利汽车集团销售公司副总经理&#xff0c;并负责集团渠道发展委员会的主任一职&#xff0c;向吉利汽车集团的高级副总裁林杰报告…

C#生产流程控制(串行,并行混合执行)

开源框架CsGo https://gitee.com/hamasm/CsGo?_fromgitee_search 文档资料&#xff1a; https://blog.csdn.net/aa2528877987/article/details/132139337 实现效果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37…

【通俗易懂】如何使用GitHub上传文件,如何用git在github上传文件

目录 创建 GitHub 仓库 使用 Git 进行操作 步骤 1&#xff1a;初始化本地仓库 步骤 2&#xff1a;切换默认分支 步骤 3&#xff1a;连接到远程仓库 步骤 4&#xff1a;获取远程更改 步骤 5&#xff1a;添加文件到暂存区 步骤 6&#xff1a;提交更改 步骤 7&#xff1a…

Spring框架中JavaBean的生命周期及单例模式与多列模式

Spring框架中JavaBean的生命周期及单例模式与多列模式 1. Spring框架中JavaBean的管理过程1.1 #定义Bean1.2 Bean的实例化1.3 属性注入1.4 初始化方法1.5 Bean的使用和引用1.6 销毁方法 2. 单例模式与原型模式在JavaBean管理中的应用1.在Spring管理JavaBean的过程中&#xff0c…

java八股文面试[数据结构]——ArrayList和LinkedList区别

ArrayList和LinkedList的异同 二者的线程都不安全&#xff0c;相对线程安全的Vector,执行效率高。此外&#xff0c;ArrayList时实现了基于动态数组的数据结构&#xff0c;LinkedList基于链表的数据结构&#xff0c;对于随机访问get和set&#xff0c;ArrayList觉得优于LinkedLis…

sd-webui安装comfyui扩展

文章目录 导读ComfyUI 环境安装1. 安装相关组件2. 启动sd-webui3. 访问sd-webui 错误信息以及解决办法 导读 这篇文章主要给大家介绍如何在sd-webui中来安装ComfyUI插件 ComfyUI ComfyUI是一个基于节点流程式的stable diffusion的绘图工具&#xff0c;它集成了stable diffus…

PV3D: A 3D GENERATIVE MODEL FOR PORTRAITVIDEO GENERATION 【2023 ICLR】

ICLR&#xff1a;International Conference on Learning Representations CCF-A 国际表征学习大会&#xff1a;深度学习的顶级会议 生成对抗网络(GANs)的最新进展已经证明了生成令人惊叹的逼真肖像图像的能力。虽然之前的一些工作已经将这种图像gan应用于无条件的2D人像视频生…

渗透率超90%!智能座舱赛道迎来「存量」替代升级大周期

智能座舱赛道&#xff0c;正在迎来新一轮芯片替代潮。 相比于智能驾驶领域&#xff0c;座舱主机芯片市场并不「性感」&#xff0c;但巨大的存量替代升级机会&#xff0c;也不容小视。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-6月中国市场&#xff08;不含进出口&am…

Docker(二) Docker容器

在docker中的容器都是由镜像所创建的&#xff0c;一个镜像可以创建多个容器。 一、调试Docker 启动Docker systemctl start docker 查看Docker中有哪些镜像 docker images 下载镜像 docker pull hello-world 运行镜像 docker run hello-world 出现 Hello from Docker! 这…

pdf格式怎么编辑?了解这种编辑方法就可以了

pdf格式怎么编辑&#xff1f;PDF作为一种通用的文档格式&#xff0c;以其跨平台、保真排版等优势在各个领域得到广泛应用。然而&#xff0c;对于许多人来说&#xff0c;PDF文件一直以来都被视为“静态”文件&#xff0c;不易编辑。但现在&#xff0c;有很多编辑器可以帮助我们进…

PHP“牵手”拼多多商品详情数据获取方法,拼多多API接口批量获取拼多多商品详情数据说明

拼多多商品详情接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取拼多多商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在拼多多电商平台的开发中&#xff0c;拼多多详情接口 API 是非常常用的 API&#xff0c;因此本文将详细介绍拼多多…

Php“牵手”淘宝商品销量数据采集方法,淘宝API接口申请指南

淘宝天猫商品销量接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取商品的详细信息&#xff0c;包括商品的标题、描述、图片&#xff0c;月销量&#xff0c;总销量等信息。在电商平台的开发中&#xff0c;销量接口API是非常常用的 API&#xff0c;因此本…

Linux解决RocketMQ中NameServer启动问题

启动步骤可以查看官网&#xff0c;https://github.com/apache/rocketmq 一下说明遇到的问题。 1&#xff1a;ROCKETMQ_HOME问题 根据官网提示进入mq/bin目录下&#xff0c;可以使用./mqnamesrv进行NameServer启动&#xff0c;但是会遇到第一个问题&#xff0c;首次下载Rocket…

Windows10批处理命令行设置环境变量笔记,无需重新安装python与chrome

近期&#xff0c;工作中经常安装、部署python生产、开发环境&#xff0c;比较麻烦&#xff0c;也没有心情去优化。突然&#xff0c;我的电脑崩溃了&#xff0c;在重新安装电脑的过程中&#xff0c;保留了原来的安装软件&#xff08;有的没有放在系统盘中&#xff09;&#xff0…

Spring Clould 搜索技术 - elasticsearch

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初识ES-什么是elasticsearch&#xff08;P77&#xff0c;P78&#xff09; 1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能…