「C/C++」C++ STL容器库 之 std::string 字符串类

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

目录

      • 引言
      • 支持的C++版本
      • std::string的基本用法
        • 1. 包含头文件
        • 2. 构造和初始化
        • 3. 访问和修改字符串
        • 4. 字符串比较
        • 5. 字符串查找和替换
        • 6. 字符串迭代
      • 总结

引言

std::string是C++标准库中的一个核心类,用于表示和操作字符串。这个类在C++98标准中首次引入,并在后续的C++03、C++11、C++14、C++17和C++20等标准中得到了持续的改进和增强。std::string提供了丰富的成员函数和操作符,使得字符串的创建、修改、访问和比较等操作变得既简单又高效。本文将详细介绍std::string的用法,并通过代码示例展示其在实际编程中的应用。

在这里插入图片描述

支持的C++版本

std::string自C++98标准以来就一直是C++标准库的一部分,并在后续的C++标准中得到了持续的支持和改进。因此,你可以在任何支持这些标准的C++编译器中使用std::string

std::string的基本用法

1. 包含头文件

要使用std::string,你需要包含<string>头文件。

#include <string>
2. 构造和初始化

std::string的构造函数允许你通过多种方式初始化字符串,包括无参构造(空字符串)、使用C风格字符串初始化、使用另一个std::string对象初始化、使用字符数组或字符指针的指定长度部分初始化等。

#include <iostream>
#include <string>

int main() {
    // 无参构造,空字符串
    std::string s1;
    std::cout << "s1: \"" << s1 << "\"" << std::endl; // 输出:s1: ""

    // 使用C风格字符串初始化
    std::string s2("Hello, World!");
    std::cout << "s2: \"" << s2 << "\"" << std::endl; // 输出:s2: "Hello, World!"

    // 使用另一个std::string对象初始化
    std::string s3(s2);
    std::cout << "s3: \"" << s3 << "\"" << std::endl; // 输出:s3: "Hello, World!"

    // 使用字符数组或字符指针的指定长度部分初始化
    const char* cstr = "Hello, C++!";
    std::string s4(cstr, 5); // 只取前5个字符
    std::cout << "s4: \"" << s4 << "\"" << std::endl; // 输出:s4: "Hello"

    return 0;
}
3. 访问和修改字符串

std::string提供了成员函数来访问和修改字符串的内容,包括at()operator[]front()back()append()assign()等。

#include <iostream>
#include <string>

int main() {
    std::string s = "Hello, World!";

    // 访问字符串中的字符
    char ch = s[7]; // 访问第8个字符(索引从0开始)
    std::cout << "Character at index 7: " << ch << std::endl; // 输出:Character at index 7: W

    // 修改字符串中的字符
    s[7] = 'C';
    std::cout << "Modified string: " << s << std::endl; // 输出:Modified string: Hello, C++!

    // 添加字符到字符串末尾
    s.append("!!!");
    std::cout << "Appended string: " << s << std::endl; // 输出:Appended string: Hello, C++!!!

    // 分配新的字符串内容
    s.assign("New String");
    std::cout << "Assigned string: " << s << std::endl; // 输出:Assigned string: New String

    return 0;
}
4. 字符串比较

std::string重载了比较操作符(如==!=<<=>>=)来比较两个字符串的内容。

#include <iostream>
#include <string>

int main() {
    std::string s1 = "Hello";
    std::string s2 = "World";
    std::string s3 = "Hello";

    // 比较字符串
    if (s1 == s3) {
        std::cout << "s1 is equal to s3" << std::endl; // 输出:s1 is equal to s3
    } else {
        std::cout << "s1 is not equal to s3" << std::endl;
    }

    if (s1 < s2) {
        std::cout << "s1 is less than s2" << std::endl; // 输出:s1 is less than s2
    } else {
        std::cout << "s1 is not less than s2" << std::endl;
    }

    return 0;
}
5. 字符串查找和替换

std::string提供了成员函数来查找子字符串的位置和替换子字符串,包括find()rfind()replace()等。

#include <iostream>
#include <string>

int main() {
    std::string s = "Hello, World! Hello, C++!";

    // 查找子字符串
    size_t pos = s.find("Hello");
    if (pos != std::string::npos) {
        std::cout << "Found 'Hello' at position: " << pos << std::endl; // 输出:Found 'Hello' at position: 0
    } else {
        std::cout << "'Hello' not found" << std::endl;
    }

    // 替换子字符串
    std::string replaced = s.replace(s.find("C++"), 3, "STL");
    std::cout << "Replaced string: " << replaced << std::endl; // 输出:Replaced string: Hello, World! Hello, STL!

    return 0;
}
6. 字符串迭代

你可以使用迭代器来遍历std::string中的字符。

#include <iostream>
#include <string>

int main() {
    std::string s = "Hello, World!";

    // 使用迭代器遍历字符串
    for (std::string::iterator it = s.begin(); it != s.end(); ++it) {
        std::cout << *it;
    }
    std::cout << std::endl; // 输出:Hello, World!

    return 0;
}

在C++11及更高版本中,你还可以使用范围for循环来简化迭代过程。

#include <iostream>
#include <string>

int main() {
    std::string s = "Hello, World!";

    // 使用范围for循环遍历字符串
    for (char ch : s) {
        std::cout << ch;
    }
    std::cout << std::endl; // 输出:Hello, World!

    return 0;
}

总结

std::string是C++标准库中的一个功能强大的字符串处理类,它提供了丰富的成员函数和操作符来创建、修改、访问和比较字符串。通过使用std::string,程序员可以更加高效和安全地处理字符串数据。无论是在文本处理、文件I/O还是网络通信等场景中,std::string都是一个不可或缺的工具。希望本文能够帮助读者更好地理解和使用std::string

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

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

相关文章

vue使用jquery的ajax,页面跳转

一、引入jquery依赖 打开终端更新npm npm install -g npm 更新完后引入输入npm install jquery 加载完后 在最外层的package.json文件中加入以下代码 配置好后导入jquery 设置变量用于接收服务器传输的数据 定义ajax申请数据 服务器的Controller层传输数据 &#xff08;…

linux介绍与基本指令

前言 本次博客将会讲解linux的来源历史、linux操作系统的理解以及它的一些基本指令。 1.linux的介绍 linux的来源 linux的来源最初还是要说到unix操作系统的。 1968年&#xff0c;一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作…

C++ 基于自主实现的红黑树封装Map和Set (下)

C 基于自主实现的红黑树封装Map和Set &#xff08;上&#xff09;-CSDN博客 本文针对上文中没有完成的迭代器接口进行一个补充。 1. 箭头访问 在map的测试中使用箭头访问测试&#xff0c;我们可以复习到: 测试刚才重载的-> , 出现了经典双箭头问题 按理来说应该是像下图一样…

uniapp-components(封装组件)

<myitem></myitem> 在其他类里面这样调用。

Python数值计算(28)——理查森外推法

1. 基础知识 理查森外推法( Richardson extrapolation)是一种提高某些数值过程精度的简单方法&#xff0c;在数值方法中广泛应用。 理查森外推法的基本思想是通过对原函数进行多次求导&#xff0c;并在每一步求导的基础上进行线性组合&#xff0c;得到一个新的函数&#xff0c…

智能时代摩托车一键启动无钥匙进入感受科技前线

向智能化与高性能迈进,技术创新与绿色转型引领摩托车行业智能化出行。 摩托车一键启动无钥匙进入功能是一种先进的车辆控制系统&#xff0c;它允许驾驶员在不使用传统机械钥匙的情况下&#xff0c;通过智能感应技术自动解锁和启动摩托车。这种系统通常包括一个智能钥匙&#x…

从零开始学习 YOLOv8:目标检测与车牌识别实例

1. 引言 什么是目标检测&#xff1f; 目标检测就像是在寻找隐藏的宝藏。想象一下&#xff0c;你在一个巨大的图画里&#xff0c;里面藏着无数的物体&#xff0c;而你的任务是迅速找到其中的几样&#xff0c;比如说&#xff0c;一只流浪的小猫和一辆红色的小轿车。目标检测就是…

HTML作业

作业 复现下面的图片 复现结果 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><form action"#"method"get"enctype"text/plain"><…

【实验六】基于前馈神经网络的二类任务

1 数据集构建 2 模型构建 2.1 线性层算子 2.2 Logistic算子 2.3 层次串行组合 3 损失函数 4 模型优化 4.1 反向传播算法 4.2 损失函数 4.3 Logistic算子 4.4 线性层 4.5 整个网络 4.6 优化器 5 完善Runner类&#xff1a;RunnerV2_1 6 模型训练 7 性能评价 8 完…

Java应用程序的测试覆盖率之设计与实现(二)-- jacoco agent

说在前面的话 要想获得测试覆盖率报告&#xff0c;第一步要做的是&#xff0c;采集覆盖率数据&#xff0c;并输入到tcp。 而本文便是介绍一种java应用程序部署下的推荐方式。 作为一种通用方案&#xff0c;首先不想对应用程序有所侵入&#xff0c;其次运维和管理方便。 正好…

高级的SQL查询技巧有哪些?

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于高级SQL查询技巧方面的相关内容&#xf…

协程必知必会-系列4-协程本地变量

文章目录 协程本地变量相关结构体实现原理代码实现代码示例思考题 协程本地变量 在上一篇文章中&#xff0c;我们介绍了如何通过协程来实现批量并发执行&#xff0c;本篇文章将向大家介绍如何在协程的基础之上&#xff0c;实现协程本地变量。 注意&#xff1a;「为了减轻大家…

Docker基础部署

一、安装Ubuntu系统 1.1 新建虚拟机 打开VMware Workstation&#xff0c;选择文件->新建虚拟机->典型&#xff08;推荐T&#xff09;->安装程序光盘映像文件->输入虚拟的名字->一直下一步即可 安装程序光盘映像文件 注意&#xff1a;选择CentOS-7-x86_64-DVD-…

Springboot 使用EasyExcel导出Excel文件

Springboot 使用EasyExcel导出Excel文件 Excel导出系列目录&#xff1a;引入依赖创建导出模板类创建图片转化器 逻辑处理controllerservice 导出效果遗留问题 Excel导出系列目录&#xff1a; 【Springboot 使用EasyExcel导出Excel文件】 【Springboot 使用POI导出Excel文件】 …

大模型带来新安全机遇

当前网络空间安全面临攻击隐蔽难发现、数据泄露风险高和违法信息审核难等挑战。大模型展现出强大的信息理解、知识抽取、意图和任务编排等能力&#xff0c;为网络空间安全瓶颈问题提供了新的解决思路和方法。与此同时&#xff0c;大模型发展也催生了恶意软件自动生成、深度伪造…

vue 项目i18n国际化,快速抽离中文,快速翻译

国际化大家都知道vue-i18n 实现的&#xff0c;但是有个问题&#xff0c;就是繁杂的抽离中文字符的过程&#xff0c;以及翻译中文字符的过程&#xff0c;关于这个有些小工具可以希望可以帮到大家 1.安装vue-i18n npm i vue-i18n8.22.22.ElementUI多语言配置 在src目录下创建…

《Python基础教程》笔记(ch0-1)

前言 在Python生态系统中&#xff0c;各种包轮番登场&#xff0c;各种编码实践大行其道后又日渐式微。 引言 Python是什么&#xff1f;为何要使用它&#xff1f;官方宣传说&#xff1a;Python是一种面向对象的解释性高级编程语言&#xff0c;具有动态语义。 这句话的要点在…

Java网络编程-简单的API调用

Get请求 - 无参数 安装依赖库 首先需要安装一个库&#xff1a; Okhttp3&#xff0c;这是一个非常流行的 HTTP 库&#xff0c;可以简单、快速的实现 HTTP 调用。 安装 Okhttp3 的方式是在 pom.xml 文件中增加依赖&#xff1a; <!-- https://mvnrepository.com/artifact/c…

08 实战:色彩空间展示(本程序以视频为主)

程序效果如下: 我在这里讲解RGB和YCbCr的原理: 一、RGB颜色空间 1.1 基本概念 RGB颜色空间是一种最基础和常用的颜色表示方式,它基于人眼感知色彩的三原色原理。RGB分别代表: R(Red):红色G(Green):绿色B(Blue):蓝色通过这三种基本颜色的不同组合,可以产生人眼…

计算机毕业设计Spark+大模型动漫推荐系统 动漫视频推荐系统 漫画分析可视化大屏 漫画爬虫 漫画推荐系统 漫画爬虫 知识图谱 大数据

《Spark大模型动漫推荐系统》开题报告与任务书 一、引言 随着互联网技术的飞速发展&#xff0c;动漫产业的数据量急剧增长。用户面临着海量动漫作品的选择难题&#xff0c;如何从这些数据中高效地提取有价值的信息&#xff0c;为用户推荐符合其喜好的动漫作品&#xff0c;成为…