目录

string与C中字符串的区别:

C字符串:

string字符串:

string的定义和初始化:

输入字符串:

方式1:

方式2:

字符串的拼接的操作:

方式1:使用“+”

方式2:使用“+=”

方式3:使用append()

字符串的查找和替换:

使用find函数进行查找目标的字符串:

替换:

字符串的截取:

查询长度、大小、容量和删除、插入、清空操作:

减少容量的大小:

遍历操作:

可以使用索引进行访问:

可以使用迭代器进行访问:

可以使用at()函数:

大小写转换和数字之间的转换:

大小写转换:

类型转换:


String是标准库提供的字符串类,位于头文件<string>中,提供了丰富的成员函数和更高的安全性。

string与C中字符串的区别:

C字符串:

char ch[]="Hello World";

字符数组末尾以"\0"结尾,需手动管理内存。

string字符串:

std::string str="Hello World";

自动管理内存,提供了丰富的成员函数。

string的定义和初始化:

#include <iostream>
#include <string>int main(){std::string str;//默认初始化std::string str1 = "Hello World";//使用字符串字面常量进行赋值std::string str2 = str1;//将str1赋值给str2std::string str3(str2);//使用拷贝构造函数std::string str4(str3,0,5);//使用部分初始化,第二个参数为起始下标,第三个参数为个数std::string str5(6,'a');//使用重复的字符串进行初始化std::cout<<str<<std::endl;std::cout<<str1<<std::endl;std::cout<<str2<<std::endl;std::cout<<str3<<std::endl;std::cout<<str4<<std::endl;std::cout<<str5<<std::endl;return 0;
}

运行结果:

输入字符串:

方式1:

使用"cin"输入字符串时,默认会以空格、制表符或换行符作为分隔符,因此当遇到第一个空格、制表符或者换行符时就会停止读取。

#include <iostream>
#include <string>int main(){std::string str;std::cin>>str;std::cout<<str<<std::endl;return 0;
}

示例运行结果:

方式2:

使用"getline()"输入,直到遇到换行符才会停止读取。需要包含头文件<string>

#include <iostream>
#include <string>int main() {std::string str;std::getline(std::cin, str);std::cout << str << std::endl;return 0;
}

示例运行结果:

字符串的拼接的操作:

方式1:使用“+”

#include <iostream>
#include <string>int main() {std::string str;std::getline(std::cin, str);std::cout << "str:" << str << std::endl;std::string str1;std::getline(std::cin, str1);std::cout << "str1:" << str1 << std::endl;std::string str2 = str + str1;std::cout << "str2:" << str2 << std::endl;return 0;
}

示例运行结果:

方式2:使用“+=”

#include <iostream>
#include <string>int main() {std::string str1;std::getline(std::cin, str1);std::cout << "str1:" << str1 << std::endl;std::string str2;std::getline(std::cin, str2);std::cout << "str2:" << str2 << std::endl;str2 += str1;std::cout << "newstr2:" << str2 << std::endl;return 0;
}

示例运行结果:

方式3:使用append()

#include <iostream>
#include <string>int main() {std::string str1;std::getline(std::cin, str1);std::cout << "str1:" << str1 << std::endl;std::string str2;std::getline(std::cin, str2);std::cout << "str2:" << str2 << std::endl;str2.append(str1);std::cout << "newstr2:" << str2 << std::endl;return 0;
}

示例运行结果:

字符串的查找和替换:

使用find函数进行查找目标的字符串:

#include <iostream>
#include <string>int main() {std::string str1 = "Apple‌‌Banana‌Orange‌‌Pineapple‌Grape‌Strawberry‌Watermelon‌‌Pomegranate‌";unsigned index = str1.find("Pomegranate‌");if (index != std::string::npos) {std::cout << "找到想要找到的目标字符串" << std::endl;std::cout << "目标字符串的位置:" << index << std::endl;}else {std::cout << "没有找到想要找到的目标字符串" << std::endl;}return 0;
}

示例运行结果:

替换:

使用replace(参数1,参数2,参数3):目标字符串,起始位置,长度。

#include <iostream>
#include <string>int main() {std::string str1 = "str1str2str3str4str5str6";std::cout << "替换之后的str1:" << str1 << std::endl;unsigned index = str1.find("str4");std::string str2 = " == ";if (index != std::string::npos) {std::cout << "找到想要找到的目标字符串" << std::endl;str1.replace(index, str2.length() , str2);std::cout << "替换之后的str1:" << str1 << std::endl;}else {std::cout << "没有找到想要找到的目标字符串" << std::endl;}return 0;
}

示例运行结果:

字符串的截取:

使用substr(参数1,参数2):起始位置,长度

#include <iostream>
#include <string>int main() {std::string str1 = "str1str2str3str4str5str6";std::string str2 = str1.substr(11, 4);std::cout << "str2:" << str2 << std::endl;return 0;
}

示例运行结果:

查询长度、大小、容量和删除、插入、清空操作:

#include <iostream>
#include <string>int main() {std::string str1 = "str1str2str3str4str5str6";std::cout << "str1的长度:" << str1.length() << std::endl;std::cout << "str1的大小:" << str1.size() << std::endl;std::cout << "str1的实际容量:" << str1.capacity() << std::endl;if (str1.empty()) {std::cout << "str1为空" << std::endl;}else {std::cout << "str1非空" << std::endl;}//删除操作str1.erase(0, 4);//从下标为0开始删除,删除的长度为4std::cout << "str1第一次删除之后的结果:" << str1 << std::endl;str1.erase(str1.begin(), str1.begin() + 4);//使用迭代器进行删除,起始位置为str的首字符地址,往后删除4个字符std::cout << "str1第二次删除之后的结果:" << str1 << std::endl;str1.erase(0);//当只有一个值时,从起始位置一直删除到最后std::cout << "str1第三次删除之后的结果:" << str1 << std::endl;std::cout << "str1的长度:" << str1.length() << std::endl;std::cout << "str1的大小:" << str1.size() << std::endl;std::cout << "str1的实际容量:" << str1.capacity() << std::endl;//插入操作str1.insert(0,"str1");//从下标为0的位置进行插入std::cout << "str1插入之后的结果:" << str1 << std::endl;std::cout << "str1的长度:" << str1.length() << std::endl;std::cout << "str1的大小:" << str1.size() << std::endl;std::cout << "str1的实际容量:" << str1.capacity() << std::endl;//清空字符串str1.clear();std::cout << "str1清空之后的结果:" << str1 << std::endl;std::cout << "str1的长度:" << str1.length() << std::endl;std::cout << "str1的大小:" << str1.size() << std::endl;std::cout << "str1的实际容量:" << str1.capacity() << std::endl;return 0;
}

示例运行结果:

上述例子可以知道,字符串的实际长度和容量并不一定是相等的,当超过容量是,会自动进行扩容。当对字符串进行删除或者清空内容之后,实际的容量并不会进行变化。所以如果当一开始插入的字符串很长,那么就需要预留更大的空间来进行存储,但是之后对字符串进行清空之后存储一个很小的字符串,那么就会浪费空间。

resize(参数1,参数2)函数:

#include <iostream>
#include <string>int main() {std::string str1 = "str1str2str3str4str5str6";std::cout << "str1的长度:" << str1.length() << std::endl;std::cout << "str1的大小:" << str1.size() << std::endl;std::cout << "str1的实际容量:" << str1.capacity() << std::endl;std::cout << std::endl;str1.resize(31, '0');std::cout << str1 << std::endl;std::cout << "str1的长度:" << str1.length() << std::endl;std::cout << "str1的大小:" << str1.size() << std::endl;std::cout << "str1的实际容量:" << str1.capacity() << std::endl;std::cout << std::endl;str1.resize(10);std::cout << str1 << std::endl;std::cout << "str1的长度:" << str1.length() << std::endl;std::cout << "str1的大小:" << str1.size() << std::endl;std::cout << "str1的实际容量:" << str1.capacity() << std::endl;return 0;
}

示例运行结果:

使用resize(参数1,参数2)时,当指定的字符串长度大于当前字符串长度时,默认用空字符(\0)填充新增位置,或通过参数2指定填充字符。

当指定的字符串的长度小于当前字符串的长度时,丢弃第n个位置之后的字符,但‌不释放内存‌(容量capacity()保持不变)。可以知道使用resize()函数并不能减少容量的大小。

减少容量的大小:

使用shrink_to_fit()函数在清空字符串之后进行重置容量的大小。

#include <iostream>
#include <string>int main(){std::string str1 = "str1str2str3str4str5";std::cout<<str1.capacity()<<std::endl;str1.clear();std::cout<<str1.capacity()<<std::endl;str1.shrink_to_fit();std::cout<<str1.capacity()<<std::endl;return 0;
}

示例运行结果:

可以利用局部变量的特性,因为string是一个类,可以利用其析构函数对其进行释放。

#include <iostream>
#include <string>int main() {std::string str1 = "str1str2str3str4str5str6";std::cout << str1.capacity() << std::endl;str1.clear();std::cout << str1.capacity() << std::endl;{std::string str2;str2.swap(str1);std::cout << "str1:" << str1.capacity() << std::endl;std::cout << "str2:" << str2.capacity() << std::endl;}std::cout << "str1:" << str1.capacity() << std::endl;return 0;
}

示例运行结果:

str1.swap(str2) 会交换两者的所有内部状态(包括容量)。当与空字符串交换时,str1 的容量会被替换为空字符串的初始容量。

#include <iostream>
#include <string>int main() {std::string str1 = "str1str2str3str4str5str6";std::string str2 = "";str2.swap(str1);std::cout << "str1的长度:" << str1.length()<< std::endl;std::cout << "str1的大小:" << str1.size() << std::endl;std::cout << "str1的容量大小:" << str1.capacity() << std::endl;std::cout << "str1:" << str1 << std::endl;std::cout << "str2的长度:" << str2.length() << std::endl;std::cout << "str2的大小:" << str2.size() << std::endl;std::cout << "str2的容量大小:" << str2.capacity() << std::endl;std::cout << "str2:" << str2 << std::endl;return 0;
}

实例运行结果:

遍历操作:

可以使用索引进行访问:

#include <iostream>
#include <string>int main() {std::string str1 = "abcdefghijklmnopqrstuvwxyz";for (int index = 0; index < str1.size(); index++) {std::cout << str1[index] << " ";}return 0;
}

示例运行结果:

可以使用迭代器进行访问:

#include <iostream>
#include <string>int main() {std::string str1 = "abcdefghijklmnopqrstuvwxyz";for (auto it = str1.begin(); it != str1.end(); ++it) {std::cout << *it << " ";}return 0;
}

实例运行结果:

可以使用at()函数:

#include <iostream>
#include <string>int main() {std::string str1 = "abcdefghijklmnopqrstuvwxyz";for (int index = 0; index < str1.size(); index++) {std::cout << str1.at(index) << " ";}return 0;
}

实例运行结果:

大小写转换和数字之间的转换:

大小写转换:

C++ 中可通过 <cctype> 头文件调用,并建议配合 std::transform 处理字符串。

toupper:将字符转换为大写字母,如果原字符是大写,则不变。

tolower:将字符转换为小写字母,如果原字符是小写,则不变。

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>int main() {std::string str1 = "abcdefghijklmnopqrstuvwxyz";std::transform(str1.begin(), str1.end(), str1.begin(), [](unsigned char ch) {return std::toupper(ch); });std::cout << str1 << std::endl;std::transform(str1.begin(), str1.end(), str1.begin(), [](unsigned char ch) {return std::tolower(ch); });std::cout << str1 << std::endl;return 0;
}

示例结果运行:

类型转换:

#include <iostream>
#include <string>int main() {int number = 100;double IP = 3.141926;std::string str1 = std::to_string(number);std::string str2 = std::to_string(IP);std::cout << "str1:" << str1 << std::endl;std::cout << "str2:" << str2 << std::endl;str1.append("00");str2 = str2.substr(0,6);std::cout << "str1:" << str1 << std::endl;std::cout << "str2:" << str2 << std::endl;number = std::stoi(str1);IP = std::stod(str2);std::cout << "number:" << number << std::endl;std::cout << "IP:" << IP << std::endl;return 0;
}

实例运行结果:

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

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

相关文章

【Linux】Java线上问题,一分钟日志定位

【Linux】Java线上问题&#xff0c;一分钟日志定位1. 查看异常堆栈2. 实时叮新日志3. 翻历史/压缩日志4. 统计异常数量5. 多种异常一起查6. 反向过滤7. 同时满足多个关键字查询8. 定位最近一次异常9. 异常排行榜1. 查看异常堆栈 # 在 a.log 文件中查找包含 NullPointerExcepti…

智慧农业温室大棚远程监控物联网系统解决方案

一、方案背景与目标随着现代农业向智能化、精准化转型&#xff0c;传统温室大棚管理面临效率低、响应慢、成本高等痛点。本方案通过部署御控农业物联网系统&#xff0c;实现温室环境参数实时监测、设备远程控制、数据智能分析及预警决策&#xff0c;助力农户降低人工成本&#…

【剖析高并发秒杀】从流量削峰到数据一致性的架构演进与实践

一、 挑战&#xff1a;三高背景下的数据库瓶颈秒杀场景的核心挑战可以归结为“三高”&#xff1a;高并发、高性能、高可用。而系统中最脆弱的一环&#xff0c;往往是我们的关系型数据库&#xff08;如MySQL&#xff09;。它承载着最终的数据落地&#xff0c;其连接数、IOPS和CP…

Redisson最新版本(3.50.0左右)启动时提示Netty的某些类找不到

文章目录一、写在前面二、解决方案1、解决方案2、一劳永逸3、确定redisson依赖netty的版本一、写在前面 Redisson最新版本&#xff0c;大概3.47.0&#xff0c;在JDK8环境下&#xff08;实测JDK17也一样&#xff09;会提示Netty的某些类找不到&#xff1a; Exception in threa…

MTK Linux DRM分析(八)- KMS drm_crtc.c

一、简介 Linux DRM(Direct Rendering Manager)子系统是内核中管理图形硬件的核心组件,而 CRTC(CRT Controller)又是其中的关键之一。它起源于过去控制阴极射线管(CRT)显示器的控制器概念,如今在现代图形显示中依旧扮演着至关重要的角色。 可以把 CRTC 想象成图形显示…

vue+openlayers示例:适配arcgis矢量瓦片服务以及样式(附源码下载)

由于单位这边有个项目是基于openlayers地图引擎框架实现webgis地图可视化功能&#xff0c;但是要调用第三方的arcgis矢量瓦片服务以及适配样式&#xff0c;在这个背景下&#xff0c;基于openlayersvue实现适配arcgis矢量瓦片服务以及样式效果&#xff0c;适合学习openlayers与前…

mybatis xml中表名 字段报红解决

mybatis xml中表名 字段报红解决

谷歌浏览器重定向url,谷歌浏览器浏览网页修改url到本地

谷歌应用商店搜索插件requestly&#xff08;有个相似名称的插件&#xff0c;选择这个Requestly: Supercharge your Development & QA&#xff09; 安装后打开插件网址https://app.requestly.io/rules/my-rules 新建规则rules->my rules-> new rule -> redirect …

教育场景下禁用html5播放器拖动进度条的例子

禁用视频课程进度条的拖动功能&#xff0c;主要是为了强制学员按照课程设计的顺序观看内容&#xff0c;防止跳过关键知识点&#xff0c;从而保证学习效果和课程的完整性。 1.防止应试作弊&#xff1a; 在一些需要观看视频才能解锁下一章节或完成测试的场景中&#xff0c;禁用…

async实战

一、协程 协程是程序员人为创造 协程是一种用户态内的上下文切换技术。通过一个线程实现代码块相互切换执行。yield返回生成器 yield from 代表&#xff0c;跳到 func2协程函数 通过函数名()&#xff0c;是执行不了的。需要把函数加入到loop里面来&#xff0c;才可以被执行。 把…

个人搭建小网站教程(云服务器Ubuntu版本)

目录 1.配置云服务器&#xff08;略讲&#xff09; 2.vscode连接&#xff08;ssh连接&#xff09; 3.本地压缩项目包 4.传输项目 5.配置项目依赖 6.运行项目 1.启动 FastAPI 后端&#xff08;Python 部分&#xff09; 2.启动 Next.js 前端&#xff08;Node.js 部分&…

pion/webrtc v4.1.4 版本发布:关键特性与性能优化全面解析

引言 实时通信技术在现代互联网应用中扮演着越来越重要的角色&#xff0c;从视频会议到在线教育&#xff0c;从远程医疗到物联网设备交互&#xff0c;WebRTC技术已经成为实时音视频通信的事实标准。作为Go语言中最成熟且广泛使用的WebRTC实现&#xff0c;pion/webrtc项目持续推…

集成算法(聚类)

下面简单集成算法代码from sklearn.datasets import make_blobs from sklearn.cluster import KMeans import matplotlib.pyplot as plt# 创建数据集&#xff0c;生成 3 个中心的聚类数据&#xff0c;共 300 个样本&#xff0c;每个样本 2 个特征 X, _ make_blobs(n_samples30…

01 网络信息内容安全--绪论

1 课程内容 网络信息内容获取技术网络信息内容预处理技术网络信息内容过滤技术社会网络分析技术入侵检测技术异常流量检测技术对抗攻击技术 2 理论研讨 分为16个组 2.1 网络信息内容获取技术&#xff1a;第1组 【用DeepSeek网站爬虫&#xff0c;数据获取零成本&#xff01…

GPT-5:天变了吗?还是风停了?

2025年8月8日&#xff0c;OpenAI 发布了 GPT-5。这次更新被许多人寄予厚望&#xff0c;也引发了不少争议。对普通用户来说&#xff0c;这是一场“又快又会做事”的智能盛宴&#xff1b;而对资深开发者和 AI 研究者而言&#xff0c;GPT-5 可能更像是一次不够激进、略显保守的版本…

生信分析自学攻略 | R语言数据筛选和修改

在《生信小白自学攻略》系列的前几篇文章中&#xff0c;我们已经了解了 R 和 RStudio 的安装、RStudio 的深度探索&#xff0c;以及 R 语言的基本数据类型和数据结构。现在&#xff0c;是时候深入探讨如何运用 R 语言对数据进行精细化处理了。本篇推文将详细介绍如何在 R 中对数…

从零开始学习概念物理(第13版)(1)

前言&#xff1a;对我来说&#xff0c;最有用的就是物理了&#xff0c;尤其是电磁学。但是要学好它&#xff0c;我得夯实我的基础&#xff0c;前面更加基础的数学和物理都不能拉下。现在我问了Deepseek推荐的国外物理书&#xff0c;这本《概念物理》是最适合我&#xff0c;等入…

CSS变量

元素背景需要统一&#xff0c;一个个设置修改起来很麻烦&#xff0c;也没有全局变量&#xff1f; CSS中的变量_css变量-CSDN博客 -- 前缀定义变量&#xff0c;var(--) 使用变量&#xff0c;:root 表示根元素。 :root { --bg:#222; --fg:#bbb; } body { background:var(--bg)…

C++(Qt)软件调试---vscode配置clang-tidy静态分析(30)

C(Qt)软件调试—vscode配置clang-tidy静态分析&#xff08;30&#xff09; 文章目录C(Qt)软件调试---vscode配置clang-tidy静态分析&#xff08;30&#xff09;[toc]1 概述2 clang-tidy基本用法3 目前已有检查项4 vscode配置clang-tidy5 .clang-tidy配置文件6 参考地址更多精彩…

每天自动备份oracle

oracle数据库比其他数据库都贵&#xff0c;但是自带的管理工具却很差&#xff0c;真不知道咋想的。想完成每天自动备份&#xff0c;只能自己动手(window环境)&#xff1a;1、创建个备份目录&#xff0c;如D:\databack2、创建个脚本&#xff1a;backup.bat核心内容如下&#xff…