C++ <string> 标头文件详解

目录

  • 1. <string> 的基本介绍
  • 2. 创建和初始化字符串
  • 3. 字符串的基本操作
    • 3.1 连接字符串
    • 3.2 获取字符串长度
    • 3.3 访问和修改字符
    • 3.4 字符串比较
  • 4. 常用字符串成员函数
    • 4.1 append()
    • 4.2 insert()
    • 4.3 erase()
    • 4.4 substr()
    • 4.5 find() 和 rfind()
    • 4.6 replace()
  • 5. 字符串转换
    • 5.1 数字转字符串
    • 5.2 字符串转数字
  • 6. 遍历字符串
  • 7.大小写转换
  • 8. std::string 和 C 风格字符串的互操作
  • 9. 总结

1. 的基本介绍

是 C++ 标准库中的头文件之一,定义了 std::string 类。std::string 是一个动态大小的字符序列,可以像数组一样通过下标访问字符,同时支持自动内存管理。在 C++ 中,std::string 替代了 C 风格的字符串(字符数组),让我们能够更方便、灵活地处理文本数据。

2. 创建和初始化字符串

std::string 支持多种初始化方式:

#include <iostream>
#include <string>int main() {std::string str1 = "Hello, World!";   // 直接初始化std::string str2("Hello, C++");       // 构造函数初始化std::string str3(10, 'A');            // 用字符 'A' 初始化10次,得到 "AAAAAAAAAA"std::string str4 = str1;              // 复制初始化std::cout << "str1: " << str1 << "\n";std::cout << "str2: " << str2 << "\n";std::cout << "str3: " << str3 << "\n";std::cout << "str4: " << str4 << "\n";return 0;
}

3. 字符串的基本操作

3.1 连接字符串

可以使用 + 操作符来连接字符串:

std::string str1 = "Hello";
std::string str2 = " World";
std::string result = str1 + str2;   // "Hello World"

3.2 获取字符串长度

使用 size() 或 length() 获取字符串的长度:

std::string str = "Hello";
std::cout << "Length: " << str.size() << "\n";  // 输出:Length: 5

3.3 访问和修改字符

可以通过下标访问和修改字符串中的字符:

std::string str = "Hello";
str[0] = 'h';
std::cout << str << "\n";  // 输出:hello

3.4 字符串比较

std::string 提供了直接比较运算符,支持 ==、!=、<、> 等操作符来比较字符串的字典顺序。

std::string str1 = "Apple";
std::string str2 = "Banana";
if (str1 < str2) {std::cout << "Apple comes before Banana\n";
}

4. 常用字符串成员函数

4.1 append()

用于在字符串末尾追加内容。

std::string str = "Hello";
str.append(" World");
std::cout << str << "\n";  // 输出:Hello World

4.2 insert()

用于在指定位置插入字符串。

std::string str = "Hello World";
str.insert(5, ", C++");
std::cout << str << "\n";  // 输出:Hello, C++ World

4.3 erase()

用于删除字符串中的指定字符。

std::string str = "Hello, C++ World";
str.erase(5, 5);  // 从位置5开始,删除5个字符
std::cout << str << "\n";  // 输出:Hello World

4.4 substr()

用于提取字符串中的子串。

std::string str = "Hello, World";
std::string sub = str.substr(0, 5);  // 提取从位置0开始的5个字符
std::cout << sub << "\n";  // 输出:Hello

4.5 find() 和 rfind()

用于查找子字符串的位置。

std::string str = "Hello, World";
size_t pos = str.find("World");
if (pos != std::string::npos) {std::cout << "Found 'World' at position: " << pos << "\n";
}

4.6 replace()

用于替换字符串中的某个部分。

std::string str = "Hello, C++";
str.replace(7, 3, "World");  // 从位置7开始,替换3个字符为"World"
std::cout << str << "\n";  // 输出:Hello, World

5. 字符串转换

5.1 数字转字符串

可以使用 std::to_string() 将数字转换为字符串:

int num = 42;
std::string str = std::to_string(num);
std::cout << str << "\n";  // 输出:42

5.2 字符串转数字

可以使用 std::stoi、std::stof、std::stod 等函数将字符串转换为数字:

std::string str = "42";
int num = std::stoi(str);
std::cout << num << "\n";  // 输出:42

6. 遍历字符串

可以用 for 循环或基于范围的 for 循环遍历字符串中的每个字符:

std::string str = "Hello";
for (char c : str) {std::cout << c << ' ';
}
// 输出:H e l l o

7.大小写转换

在 C++ 中,可以使用 库中的 std::toupper 和 std::tolower 函数将字符串转换为大写或小写。这两个函数会将一个字符转换为大写或小写,配合 for 循环可以轻松实现对整个字符串的转换。

#include <iostream>
#include <string>
#include <cctype>  // 包含 toupper 和 tolower 函数int main() {std::string str = "Hello, World!";for (char &c : str) {c = std::toupper(c);  // 转换每个字符为大写}std::cout << "Uppercase: " << str << "\n";  // 输出:HELLO, WORLD!return 0;
}

8. std::string 和 C 风格字符串的互操作

使用 c_str() 函数可以获得 std::string 对应的 C 风格字符串:

std::string str = "Hello";
const char* cstr = str.c_str();
printf("%s\n", cstr);  // 使用 printf 输出 C 风格字符串

可以直接用 std::string 的构造函数从 C 风格字符串初始化:

const char* cstr = "Hello";
std::string str(cstr);

9. 总结

std::string 是一个功能丰富、强大的类,极大简化了 C++ 中的字符串处理。通过std::string,我们可以轻松完成字符串的创建、修改、查找、转换等操作,而不用担心手动管理内存。

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

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

相关文章

Java实现JWT登录认证

文章目录 什么是JWT?为什么需要令牌?如何实现?添加依赖&#xff1a;JwtUtils.java&#xff08;生成、解析Token的工具类&#xff09;jwt配置&#xff1a;登录业务逻辑&#xff1a;其他关联代码&#xff1a;测试&#xff1a; 什么是JWT? JWT&#xff08;Json Web Token&…

Meta AR 眼镜团队前负责人加入 OpenAI;visionOS 2.2 Beta 引入超宽屏投屏模式丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09;领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的数据」、「有思考的 文章 …

如何对LabVIEW软件进行性能评估?

对LabVIEW软件进行性能评估&#xff0c;可以从以下几个方面着手&#xff0c;通过定量与定性分析&#xff0c;全面了解软件在实际应用中的表现。这些评估方法适用于确保LabVIEW程序的运行效率、稳定性和可维护性。 一、响应时间和执行效率 时间戳测量&#xff1a;使用LabVIEW的时…

鸢尾博客项目开源

1.博客介绍 鸢尾博客是一个基于Spring BootVue3 TypeScript ViteJavaFx的客户端和服务器端的博客系统。项目采用前端与后端分离&#xff0c;支持移动端自适应&#xff0c;配有完备的前台和后台管理功能。后端使用Sa-Token进行权限管理,支持动态菜单权限&#xff0c;服务健康…

mysql中InnoDB索引与MyISAM索引

mysql索引 InnoDB 索引存储 主键索引&#xff08;聚簇索引&#xff09; 定义&#xff1a;主键索引是 InnoDB 存储引擎的聚簇索引&#xff0c;它决定了表中数据的物理存储顺序。每个 InnoDB 表都有一个且仅有一个聚簇索引。存储&#xff1a;主键索引的叶子节点直接包含表的数…

淘宝有哪些API是用来获取商品列表的?(商品id列表)

淘宝商品详情接口item_get是通过商品id或者商品链接来获取商品详情数据的&#xff0c;但是不少客户是没有商品id的&#xff0c;这时需要通过接口来拿到商品id。 可以获取商品id的API有&#xff1a; item_search 通过关键字搜索商品列表 item_search_shop 获取店铺所有商品列…

拾光云影 3.3.0 | 高清秒播电视直播,支持IPV4,几千频道

拾光云影是一款Ipv4通用版电视直播APP&#xff0c;界面熟悉但有所改进&#xff0c;操作布局类似TVbox。新增了功能按钮页&#xff0c;提供更多功能。频道清晰&#xff0c;加载速度快&#xff0c;支持港澳台等特殊频道&#xff0c;大部分频道均可秒播。软件内置了直播接口&#…

【HTML】——VSCode 基本使用入门和常见操作

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 零&#xff1a;HTML开发工具VSCode的使用 1&#xff1a;创建项目 2&#xff1a;创建格式模板&#x…

Redis数据库测试和缓存穿透、雪崩、击穿

Redis数据库测试实验 实验要求 1.新建一张user表&#xff0c;在表内插入10000条数据。 2.①通过jdbc查询这10000条数据&#xff0c;记录查询时间。 ②通过redis查询这10000条数据&#xff0c;记录查询时间。 3.①再次查询这一万条数据&#xff0c;要求根据年龄进行排序&#…

Pyecharts使用本地文件绘制美国地图

访问我的github仓库outer_resources中的USA.json文件: big_data_analysis/outer_resources/USA.json at main Just-A-Freshman/big_data_analysis 保存到当前目录下; 随后运行代码: from pyecharts import options as opts from pyecharts.charts import Map from pyechar…

学习党的二十大精神,推动科技创新和发展

党的二十大提出了“创新是引领发展的第一动力”的重要思想&#xff0c;这也是我一直以来坚持的理念。在工作中&#xff0c;注重培养自己的创新精神和实践能力&#xff0c;不断探索前沿科技&#xff0c;提高自己的工作能力和科技创新水平。 网络安全建设是保障国家能源安全、提升…

LaTeX 中如何实现空格、空行与换行

诸神缄默不语-个人CSDN博文目录 在 LaTeX 中&#xff0c;空格和换行的处理方式与普通文本编辑器不同。本文将详细讲解 LaTeX 中如何插入空格、空行和换行&#xff0c;帮助大家更灵活地排版。 文章目录 1. 空格特殊空格符号使用 \hspace 插入水平空格使用 \quad 和 \qquad 2. 空…

zabbix 7.0 安装(服务器、前端、代理等)

https://www.zabbix.com/download 使用上面的地址&#xff0c;按教程执行命令安装

andrular输入框input监听值传递

效果图&#xff1a; step1: E:\projectgood\ajnine\untitled4\src\app\apple\apple.component.html <button mat-button (click)“openDialog()”>Open dialog step2: E:\projectgood\ajnine\untitled4\src\app\apple\apple.component.ts import {Component, inject}…

考公人数攀升?地信、测绘、地质、遥感等专业,能报考哪些单位

近年来&#xff0c;考公人数持续飙升&#xff0c;国考报名人数更逐年攀升。2025年国家公务员考试共有341.6万人通过资格审查&#xff0c;报录比达86:1。国考报名人数再创新高。 国家公务员考试时间安排 地理学相关岗位分析 地信属于地理科学类&#xff0c;测绘类中不包括地信&…

Git操作命令

Git操作命令 1、删除未加入git的文件 1、删除未加入git的文件 D:\Idea_Workspace\rightcloud-v397\rightcloud-schedule>git clean -f -d -n Would remove src/main/java/cn/com/cloudstar/rightcloud/schedule/system/task/push/S.java Would remove src/main/java/cn/com…

如何设置定时关闭或启动整个docker而不是某个容器

如果你想定时关闭和启动整个Docker服务&#xff0c;而不是单个容器&#xff0c;可以使用系统级别的定时任务&#xff08;如Cron&#xff09;来实现。以下是如何操作的具体步骤&#xff1a; 使用Cron来定时关闭和启动Docker服务 打开Cron表: 打开终端。输入 crontab -e 编辑当前…

Pr 视频效果:超级键

视频效果/键控/超级键 Keying/Ultra Key 超级键 Ultra Key效果是 Premiere Pro 中功能强大的抠像工具&#xff0c;主要用于绿幕/蓝幕抠像。通过选择要抠除的颜色&#xff08;通常是绿幕或蓝幕的颜色&#xff09;&#xff0c;即可以将该颜色的像素设为透明&#xff0c;实现主体与…

24-11-1-读书笔记(三十一)-《契诃夫文集》(五)下([俄] 契诃夫 [译] 汝龙)生活乏味但不乏魅力。

文章目录 《契诃夫文集》&#xff08;五&#xff09;下&#xff08;[俄] 契诃夫 [译] 汝龙&#xff09;生活乏味但不乏魅力。目录阅读笔记总结 《契诃夫文集》&#xff08;五&#xff09;下&#xff08;[俄] 契诃夫 [译] 汝龙&#xff09;生活乏味但不乏魅力。 休息&#xff0c…

戴尔电脑 Bios 如何进入?Dell Bios 进入 Bios 快捷键是什么?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机启动时运行的第一个程序&#xff0c;它负责初始化硬件并加载操作系统。对于戴尔电脑用户来说&#xff0c;有时可能需要进入 BIOS 进行一些特定的设置调整&#xff0c;比如更改启动顺序、调整性能选项或解决硬件兼容性问题…