C++:string 类

在C++中定义一个 std::string 字符串可以采用以下几种方式:

1.使用字符串字面量初始化:
cpp 复制代码
std::string str = "Hello, world!";
2.使用构造函数初始化:
cpp 复制代码
std::string szStringB("Hello wolven");
3.使用重复字符初始化:
cpp 复制代码
std::string szStringC(6, 'w');

无论采用哪种方式,都可以创建一个 std::string 类型的字符串。选择哪种方式取决于代码的需求和个人偏好。

string处理字符串的方法

std::string 类定义在 <string> 头文件中,它提供了一系列方法来操作字符串,例如计算长度、查找、插入、删除、比较等。

长度计算:length()
cpp 复制代码
std::string szStringA = "Hello,world";
std::cout << "Length:" << szStringA.length() << std::endl;
字符串查找 find()
cpp 复制代码
std::string szStringA = "Hello,world C++";
​
size_t pos = szStringA.find("C++");
​
if (pos != std::string::npos) {
    std::cout << "Found String Positon at:" << pos << std::endl;
}else{
    std::cout << "Not Found String" << std::endl;
}

使用 find 方法查找子字符串 "C++" 在 szStringA 中的位置,并将结果保存在变量 pos 中。如果 find 方法找到了子字符串,则返回子字符串在原字符串中的起始位置;如果没有找到,则返回 std::string::npos,表示未找到。最后,根据 pos 的值,输出相应的消息,指示是否找到了字符串。

字符串插入方法 insert()

1.插入单个字符: 使用 insert 方法可以在指定位置插入单个字符

cpp 复制代码
std::string szStringA = "Hello,world C++";
szStringA.insert(5,1,'0');
std::cout << szStringA << std::endl;

在szStringA字符串的位置5插入一个'0'

cpp 复制代码
输出结果:Hell0,world C++

2.插入字符串: 使用 insert 方法可以在指定位置插入另一个字符串。

cpp 复制代码
std::string szStringA = "Hello,world C++";
std::string szStringB(" Hello wolven");
szStringA.insert(15, szStringB);
std::cout << szStringA << std::endl;

在szStringA 字符串的位置15插入字符串 " Hello wolven"

cpp 复制代码
输出结果:Hello,world C++ Hello wolven

3.插入部分子字符串: 使用 insert 方法可以在指定位置插入另一个字符串的一部分。

cpp 复制代码
std::string szStringA = "Hello,world C++";
std::string szStringB(" Hello wolven");
szStringA.insert(15, szStringB,0,6);
std::cout << szStringA << std::endl;

在位置15插入字符串 szStringB的子字符串位置0到6的位置也就是" Hello"

cpp 复制代码
输出结果:Hello,world C++ Hello
字符串删除方法 erase()

**1.删除单个字符:**删除指定位置的单个字符。

cpp 复制代码
std::string szStringA = "Hello,world C++";
szStringA.erase(5,1);
std::cout << szStringA << std::endl;

删除szStringA字符串位置5的1个字符,即逗号

cpp 复制代码
输出结果:Helloworld C++

**2.删除子字符串:**删除指定范围内的子字符串。

cpp 复制代码
std::string szStringA = "Hello,world C++";
szStringA.erase(5,6);
std::cout << szStringA << std::endl;

删除szStringA字符串位置5开始算起的6个字符,即",world"

cpp 复制代码
输出结果:Hello C++

**3.删除到字符串末尾:**删除从指定位置到字符串末尾的所有字符。

cpp 复制代码
std::string szStringA = "Hello,world C++";
szStringA.erase(5);

从位置5开始删除到字符串末尾的所有字符,即 ", world C++"

cpp 复制代码
输出结果:Hello
字符串的比较方法 compare()

compare 方法返回一个整数,表示两个字符串的大小关系。如果字符串相等,则返回0;如果第一个字符串小于第二个字符串,则返回负数;如果第一个字符串大于第二个字符串,则返回正数。

cpp 复制代码
std::string szStringA = "Hello,world C++";
std::string szStringB(" Hello wolven");

int res = szStringA.compare(szStringB);
if (res > 0) {
	std::cout << "szStringA > szStringB" << std::endl;
}
else if(res < 0){
	std::cout << "szStringA > szStringB" << std::endl;
}
else
{
	std::cout << "szStringA  =  szStringB" << std::endl;
}

输出结果:

在C++中,字符串比较大小通常是按照字典序进行的,也就是按照字符的ASCII值进行比较。这意味着,如果两个字符串的第一个字符不同,那么这两个字符串的大小比较就取决于它们第一个不同的字符的ASCII值。

字符串替换方法replace()

这个方法可以用于替换指定位置和长度的子字符串为另一个字符串。

cpp 复制代码
std::string szStringA = "Hello,world C++";
std::string szStringB("wolven");

size_t pos = szStringA.find("C++");
if (pos != std::string::npos) {
	szStringA.replace(pos, 3, szStringB);
}

std::cout << szStringA << std::endl;

使用 find 方法查找字符串 szStringA 中子字符串 "C++" 的位置,并将结果保存在变量 pos 中。如果找到了 "C++",则执行以下操作:使用 replace 方法将字符串 szStringA 中从位置 pos 开始的 3 个字符(即 "C++")替换为字符串 szStringB("wolven")。最后,代码输出替换后的 szStringA

字符串拼接: + 加号操作符
cpp 复制代码
std::string szStringA = "Hello,world C++";
std::string szStringB("wolven");

std::string szStringResult = szStringA + szStringB;
std::cout << szStringResult << std::endl;

加号运算符可以将两个字符串连接起来,并产生一个新的字符串。

在 C++ 中,+ 操作符不仅可以用于数值的加法,还可以用于字符串的拼接。这是因为 C++ 对于字符串类型 std::string 重载了 + 操作符,使其能够执行字符串的连接操作。

下一篇文章就来说一下运算符重载。
相关推荐
PassLink_2 小时前
AlgorithmVisualizer项目改进与部署-网页算法可视化
算法·编程·开源项目·本地部署·算法可视化·源码改进
GalaxyPokemon3 小时前
LeetCode - 2. 两数相加
java·前端·javascript·算法·leetcode·职场和发展
编程绿豆侠3 小时前
力扣HOT100之堆:347. 前 K 个高频元素
算法·leetcode·哈希算法
芯盾时代5 小时前
安全大模型智驱网络和数据安全效能跃迁
网络·人工智能·安全·网络安全
GalaxyPokemon5 小时前
归并排序:分治思想的高效排序
数据结构·算法·排序算法
ThreeYear_s5 小时前
基于FPGA的PID算法学习———实现PI比例控制算法
学习·算法·fpga开发
CodeCraft Studio7 小时前
Excel处理控件Aspose.Cells教程:使用 C# 从 Excel 进行邮件合并
开发语言·c#·excel
小超爱编程7 小时前
纯前端做图片压缩
开发语言·前端·javascript
我不是加奈7 小时前
QMC5883L的驱动
c语言·驱动开发·单片机·嵌入式硬件
Coding小公仔7 小时前
LeetCode 240 搜索二维矩阵 II
算法·leetcode·矩阵