10-C++学习笔记-字符串

在这里插入图片描述

📚 前言

字符串是在编程中广泛使用的数据类型,用于表示一系列字符。在C++中,我们可以使用C风格字符串和string类来处理字符串操作。本篇学习笔记将详细介绍字符串的相关知识。

📖 1 C风格字符串

✨ C风格字符串初始化

C风格字符串是以空字符('\0')结尾的字符数组。可以通过以下方式进行初始化:

#include <iostream>
#include <cstring>
using namespace std;int main() {char str1[] = "Hello";   // 字符串字面值初始化char str2[6] = "World";  // 指定数组大小char str3[] = {'H', 'e', 'l', 'l', 'o', '\0'};  // 逐个字符初始化cout << "str1: " << str1 << endl;   // 输出字符串cout << "str2: " << str2 << endl;cout << "str3: " << str3 << endl;return 0;
}

在上述示例中,我们使用不同的方式对C风格字符串进行初始化,并输出字符串的内容。
运行结果:
在这里插入图片描述

✨ C风格字符串常见操作

C风格字符串提供了一系列的函数来进行字符串操作,包括计算长度、拷贝、连接等。

#include <iostream>
#include <cstring>
using namespace std;int main() {char str1[] = "Hello";char str2[20];// 字符串长度int length = strlen(str1);cout << "Length of str1: " << length << endl;// 字符串拷贝strcpy(str2, str1);cout << "str2: " << str2 << endl;// 字符串连接strcat(str2, " World");cout << "str2: " << str2 << endl;// 字符串比较int result = strcmp(str1, str2);if (result == 0) {cout << "str1 and str2 are equal" << endl;} else if (result < 0) {cout << "str1 is less than str2" << endl;} else {cout << "str1 is greater than str2" << endl;}return 0;
}

在上述示例中,我们使用了strlen函数计算字符串的长度,使用strcpy函数进行字符串拷贝,使用strcat函数进行字符串连接,并使用strcmp函数比较两个字符串的大小关系。

运行结果:
在这里插入图片描述

📖 string

C++标准库提供了string类,是对C风格字符串的封装,提供了更加方便和安全的字符串操作。

string类初始化

可以使用以下方式进行string类的初始化:

#include <iostream>
#include <string>
using namespace std;int main() {string str1 = "Hello";   // 字符串字面值初始化string str2("World");    // 直接初始化string str3(5, 'A');     // 重复字符初始化cout << "str1: " << str1 << endl;cout << "str2: " << str2 << endl;cout << "str3: " << str3 << endl;return 0;
}

在上述示例中,我们使用不同的方式对string类进行初始化,并输出字符串的内容。

运行结果:
在这里插入图片描述

string类常见操作

string类提供了丰富的成员函数来进行字符串操作,包括长度计算、拷贝、连接、子串提取等。

#include <iostream>
#include <string>
using namespace std;int main() {string str1 = "Hello";string str2 = "World";// 字符串长度int length = str1.length();cout << "Length of str1: " << length << endl;// 字符串拷贝string str3 = str1;cout << "str3: " << str3 << endl;// 字符串连接string str4 = str1 + " " + str2;cout << "str4: " << str4 << endl;// 子串提取string sub = str4.substr(6, 5);cout << "Substring: " << sub << endl;// 查找子串size_t pos = str4.find("World");if (pos != string::npos) {cout << "Substring found at position " << pos << endl;} else {cout << "Substring not found" << endl;}return 0;
}

在上述示例中,我们使用了length函数计算字符串长度,使用赋值运算符进行字符串拷贝,使用加号进行字符串连接,使用substr函数提取子串,使用find函数查找子串。

运行结果:
在这里插入图片描述

📖 3 字符串类型转换

字符串类型转换在实际开发中非常常见,包括将char类型转换为string类型,将string类型转换为char类型,以及字符串和数字之间的转换。

charstring

可以使用string类的构造函数将char类型转换为string类型:

#include <iostream>
#include <string>
using namespace std;int main() {char ch = 'A';string str = string(1, ch);   // 将字符转换为字符串cout << "str: " << str << endl;return 0;
}

在上述示例中,我们将一个字符'A'转换为字符串类型,并输出结果。

stringchar

可以使用c_str函数将string类型转换为char类型:

#include <iostream>
#include <string>
using namespace std;int main() {string str = "Hello";const char* ch = str.c_str();   // 将字符串转换为字符数组cout << "ch: " << ch << endl;return 0;
}

在上述示例中,我们将一个字符串"Hello"转换为char类型,并输出结果。

string → num(C++11)

在C++11标准中,可以使用stoistofstod等函数将字符串转换为对应的数字类型:

#include <iostream>
#include <string>
using namespace std;int main() {string str = "123";int num = stoi(str);      // 字符串转换为整数float fnum = stof(str);   // 字符串转换为浮点数double dnum = stod(str);  // 字符串转换为双精度浮点数cout << "num: " << num << endl;cout << "fnum: " << fnum << endl;cout << "dnum: " << dnum << endl;return 0;
}

<在上述示例中,我们将字符串"123"转换为整数、浮点数和双精度浮点数,并输出结果。

✨ num → string

可以使用to_string函数将数字类型转换为字符串类型:

#include <iostream>
#include <string>
using namespace std;int main() {int num = 123;string str = to_string(num);   // 数字转换为字符串cout << "str: " << str << endl;return 0;
}

在上述示例中,我们将整数123转换为字符串类型,并输出结果。

📖 总结

本篇学习笔记详细介绍了C风格字符串和string类的使用方法,包括字符串的初始化、常见操作以及字符串类型转换。通过学习和掌握这些知识,你可以更加灵活地处理字符串,并在实际编程中运用到字符串操作中。

通过对字符串的学习,我们可以更好地理解和应用字符串相关的函数和类,提高程序的灵活性和可读性。掌握好字符串的处理方法,对于开发高效、稳定的程序非常重要。希望本篇学习笔记对你的学习有所帮助!

🚀 祝你在C++学习的道路上取得更大的进步!

⭐️希望本篇文章对你有所帮助。

⭐️如果你有任何问题或疑惑,请随时向提问。

⭐️感谢阅读!

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

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

相关文章

【探索 Kubernetes|作业管理篇 系列 11】控制器的核心功能

前言 大家好&#xff0c;我是秋意零。 上一篇结束了 Pod 对象的内容。 今天要探讨的内容是 “控制器”&#xff0c;它是 Kubernetes 编排最核心的功能。理解了 “控制器”&#xff0c;你就能理解 Deployment、StatefulSet、DaemontSet、Job、CroJob 控制器对象。 最近搞了一…

MySQL数据库:数据库的约束以及数据的聚合、联合查询

目录 一.关系模型的简要概述 二.数据库的约束 2.1约束类型 2.2NULL约束 2.3 UNIQUE&#xff1a;唯一约束 2.4 默认约束 2.5 PRIMARY KEY&#xff1a;主键约束 2.6 FOREIGN KEY&#xff1a;外键约束 2.7 CHECK约束 三.高效率查询 3.1高效率查询的分类 3.2聚合查询 …

SSMP整合案例(10) vue端调整项目环境 发送请求 基本界面编写

好 之前我们已经将后端服务整个写好了 然后 我们就继续回来写我们前端的项目 之前文章SSMP整合案例(1) 构建 Spring Boot Vue MySql项目环境中我们顺手搭建了前端的项目环境 我们打开它 在终端输入 npm i axios0.21.0引入 axios 它是一个专门用来发请求的第三方插件 一定要注…

Android启动优化实践

作者&#xff1a;95分技术 启动优化是Android优化老生常谈的问题了。众所周知&#xff0c;android的启动是指用户从点击 icon 到看到首帧可交互的流程。 而启动流程 粗略的可以分为以下几个阶段 fork创建出一个新的进程创建初始化Application类、创建四大组件等 走Applicatio…

libevent实践06:监听TCP服务器

简介 函数evconnlistener_new_bind struct evconnlistener * evconnlistener_new_bind(struct event_base *base, evconnlistener_cb cb,void *ptr, unsigned flags, int backlog, const struct sockaddr *sa,int socklen) 参数解析&#xff1a; base&#xff1a;事件集合 ev…

Llama大模型运行的消费级硬件要求【CPU|GPU|RAM|SSD】

大型语言模型 (LLM) 是强大的工具&#xff0c;可以为各种任务和领域生成自然语言文本。 最先进的LLM之一是 LLaMA&#xff08;大型语言模型 Meta AI&#xff09;&#xff0c;这是由 Facebook 的研究部门 Meta AI 开发的一个包含 650 亿个参数的模型 要在家运行 LLaMA 模型&…

MySQL数据库优化技术一

纵论 对mysql优化时一个综合性的技术&#xff0c;主要包括 表的设计合理化(符合3NF)添加适当索引(index) [ 四种: 普通索引、主键索引、唯一索引unique、全文索引 ]分表技术( 水平分割、垂直分割 ) 水平分割根据一个标准重复定义几个字段值相同&#xff0c;表名称不同的表&…

CSDN-AI小组2023-半年-研发总结

目录 1.丐版「大模型」&#xff0c;Proof of concept2. LLM和AIGC的各种综述3. 基于Embedding的应用&#xff0c;问答&#xff0c;AI编程4. 评论区的AI助手5. 结合AIGC的各种数据自动计算6. 个性化推荐的系统重构7. 基于AIGC的个性化博客创作鼓励8. 博客质量分V5: 可解释性计算…

Windows 下后台启动 jar 包,UTF-8 启动 jar 包

目录 1. Windows 下启动 jar 包2. 设置 cmd 编码3. UTF-8 编码启动 jar 包 1. Windows 下启动 jar 包 小贴士&#xff1a;打包的时候把 application.yml 所有内容都注释掉&#xff0c;然后打包&#xff0c;再把 application.yml 与打好的 jar 包放在同级目录下&#xff0c;如图…

Redis概述及安装、使用和管理

文章目录 一、NoSQL非关系型数据库1.NoSQL概述2.关系型数据库和非关系型数据库区别&#xff08;1&#xff09;数据存储方式不同&#xff08;2&#xff09;扩展方式不同&#xff08;3&#xff09;对事务性的支持不同 3.非关系型数据库使用场景 二、Redis概述1.简介2.优点3.Redis…

go读写文件总结

别人的经验&#xff1a; 如今任何计算机系统每天都会产生大量的日志或数据。随着系统的增长&#xff0c;将调试数据存储到数据库中是不可行的&#xff0c;因为它们是不可变的&#xff0c;主要用于分析和解决故障的目的。因此&#xff0c;企业倾向于将其存储在文件中&#xff0…

使用conda虚拟环境,Jupyter Notebook 链接不上 kernel

1&#xff0c;检查 ipykernel 和 ipython 是否一致 输入pip list 或者conda list检查一下相应库的版本是不一致 不一致的话&#xff0c;可以更新这两个库的版本&#xff1a;pip install --upgrade 库名 2&#xff0c;看控制台的报错&#xff0c;如果是报404&#xff0c;内核找不…