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

news2024/12/28 20:53:26

在这里插入图片描述

📚 前言

字符串是在编程中广泛使用的数据类型,用于表示一系列字符。在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.coloradmin.cn/o/709517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是EMC存储 Clarrion存储的cache dirty或者cache lost(CACD)?

CACD是Cant assign, Cache Dirty的缩写&#xff0c;DELL EMC的专业术语。 在开始之前&#xff0c;先介绍下cache dirty的概念&#xff0c;朴素的语言就是有了脏数据&#xff0c;脏数据当然就是不能使用的数据了。为什么数据会脏呢&#xff1f;先从存储的基本概念聊起来。 为了加…

PoseiSwap 将向 Zepoch 节点持有者发放新一轮空投,生态启动在即

目前&#xff0c;随着各类 Layer2 空投不断内卷&#xff0c;越来越多的用户疲于参与其中&#xff08;参与交互也很有可能难以获得空投资格&#xff09;。Nautilus Chain 作为目前模块化 Layer3 架构链&#xff0c;在初期就明确了空投计划&#xff0c;即所有上线的应用都将会拿出…

各类农作物分布遥感监测数据大全

最近收集整理了大量的农作物分布的遥感监测数据&#xff0c;废话不多说&#xff0c;分享给大家&#xff0c;后面会持续更新&#xff01;&#xff01; 数据查看地址&#xff1a; https://www.dilitanxianjia.com/%e9%81%a5%e6%84%9f%e8%a7%a3%e8%af%91%e5%90%8e%e6%88%90%e6%9…

LeetCode 0002. 两数相加

【LetMeFly】2.两数相加 力扣题目链接&#xff1a;https://leetcode.cn/problems/add-two-numbers/ 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff…

2016年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——纯享题目版

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &#x1f495;兴趣爱好&#xff1a;b站天天刷&…

华为OD机试真题 Java 实现【开心消消乐】【2023 B卷 100分】

目录 一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出3、说明 一、题目描述 给定一个N行M列的二维矩阵&#xff0c;矩阵中每个位置的数字取值为0或1。矩阵示例如&#xff1a; 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的1进行反…

maven高级开发

分模块设计 例如 如果需要用到其他的模块&#xff0c;直接导入模块坐标就可以了 分模块开发&#xff0c;需建立的模块&#xff0c;选择maven模型 分模块设计需要先针对模块功能进行设计&#xff0c;再进行编码。 继承与聚合 继承&#xff1a;描述的是两个工程间的关系&…

UE4/5通过插件,用GeneratedDynamicMeshActor编辑静态网格到content中

目录 制作 直接复制下面代码到蓝图中粘贴即可&#xff1a; 效果1【用了第一个函数】&#xff1a; 效果2【用了第二个函数】&#xff1a; 制作 首先我们要打开插件&#xff1a; 然后继承GeneratedDynamicMeshActor进行创建&#xff1a; 我们制作一个函数&#xff0c;这个函数将…

Draw.io | 一款强大且支持在线编辑和导出的流程图绘制神器

目录 &#x1f48c; 写在前面 &#x1f5a5;️ 软件介绍 &#x1f5a5;️ 使用方式 1. Draw.io 的核心设计元素 1.1 绘图区 1.2 快速开始 2. Draw.io 的基本操作 2.1 移动、多选、复制与删除 2.2 创建链接 2.3 图形替换与旋转 3. 使用 Draw.io 绘制简单流程图 3.1 基本…

ChatGPT Plugins内幕、源码及案例实战(三)

ChatGPT Plugins内幕、源码及案例实战(三) ChatGPT Plugins内幕、源码及案例实战 6.4 ChatGPT Retrieval Plugin全流程内幕解析 以ChatGPT检索插件为例,我们讲解一下它整个的流程,让大家有一个比较明确、清晰的统一认知:  数据存储:设立的前提是你有文档,会有一些文…

大学教材征订管理系统数据库设计

摘 要 随着计算机及Internet迅速的发展&#xff0c;越来越多的行业实现了管理的信息化和自动化&#xff0c;教育行业也不例外。但在很多高校中,教材征订作为学校教学工作中很重要的一个环节还没完全实现信息化管理。因此本系统针对高校教材征订管理过程中人工管理存在的困难&a…

(02)Cartographer源码无死角解析-(67) 2D后端优化→FastCorrelativeScanMatcher2D -分支定界算法(BranchAndBound)1

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

Java——包(package)

一、Java中的包(package) 在Java中&#xff0c;包&#xff08;package&#xff09;是一种用于组织类和接口的命名空间的机制。它用于将相关的类和接口组织在一起&#xff0c;以便更好地管理和维护代码。 其实就是一个个文件夹 二、包(package)的作用 防止类和接口命名冲突&…

时间序列分解 | Matlab变分模态分解(VMD)的信号分解

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab变分模态分解(VMD)的信号分解 部分源码 %--------------------

尚硅谷Docker2022版学习笔记(基础篇 下)

目录 五、本地镜像发布到阿里云 5.1、本地镜像发布到阿里云流程 5.2、镜像的生成方法 基于当前容器创建一个新的镜像&#xff08;第一种方法&#xff09; DockerFile&#xff08;第二种方法&#xff09; 5.3、将本地镜像推送到阿里云 本地镜像素材原型 创建仓库镜像 选…

hive row_number()对单列进行去重

学到一个高级用法 row_number() select * ,row_number() over (partition by c_id order by s_score) from score; https://www.jb51.net/article/254952.htm

【Kafka】第一章

【Kafka】第一章 1.课程内容 1.课程内容 >课程学习

Python———PyCharm下载和安装

&#xff08;一&#xff09;开发环境介绍 开发环境&#xff0c;英文是 IDE &#xff08; Integrated Development Environment 集成开发环境&#xff09;。 不要纠结于使用哪个开发环境。开发环境本质上就是对Python 解释器python.exe 的封装&#xff0c;核心都一样。可以说&…

web前端求职面试题参考精选(合集)

web前端求职面试题之选择题 1. CSS样式表根据所在网页的位置&#xff0c;可分为?(B ) A.行内样式表、内嵌样式表、混合样式表 B.行内样式表、内嵌样式表、外部样式表 C.外部样式表、内嵌样式表、导入样式表 D.外部样式表、混合样式表、导入样式表 2. 对于标签&#xff0…