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;服务健康…

拾光云影 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;要求根据年龄进行排序&#…

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;测绘类中不包括地信&…

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;比如更改启动顺序、调整性能选项或解决硬件兼容性问题…

【C++】内存管理(二):operator new/delete

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的operator new/delete&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1 new/delete的底层2 new/delete的底层调用顺序3 delete[ ]调用析构函数的次数…

acmessl.cn提供接口API方式申请免费ssl证书

目录 一、前沿 二、API接口文档 1、证书可申请列表 简要描述 请求URL 请求方式 返回参数说明 备注 2、证书申请 简要描述 请求URL 请求方式 业务参数 返回示例 返回参数说明 备注 3、证书查询 简要描述 请求URL 请求方式 业务参数 返回参数说明 备注 4、证…

【docker】docker 环境配置及安装

本文介绍基于 官方存储库 docker 的环境配置、安装、代理配置、卸载等相关内容。 官方安装文档说明&#xff1a;https://docs.docker.com/engine/install/ubuntu/ 虚拟机环境 Ubuntu 20.04.6 LTS 安装步骤 添加相关依赖 sudo apt-get update sudo apt-get install ca-certifi…

机器学习在时间序列预测中的应用与实现——以电力负荷预测为例(附代码)

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 随着数据采集技术的发展&#xff0c;时间序列数据在各个领域中的应用越来越广泛。时间序列预测旨在基于过去的时间数据来…

uniapp+vue加油服务系统 微信小程序

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 基于微信小程序的加油服务系统设计为微信小程序和后台管理两个服务端&#xff0c;并对此设计相应的功能模块如下&#x…

大数据新视界 -- 大数据大厂之 Impala 资源管理:并发控制的策略与技巧(下)(6/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Linux(CentOS)设置防火墙开放8080端口,运行jar包,接收请求

1、查看防火墙状态 systemctl status firewalld 防火墙开启状态 2、运行 jar 包&#xff0c;使用8080端口 程序正常启动 3、使用 postman 发送请求&#xff0c;失败 4、检查端口是否开放&#xff08;需更换到 root 用户&#xff09; firewall-cmd --zonepublic --query-por…