第八节 C++ - std::string 字符串讲解

C++ std::string 字符串详解
C语言处理字符串通常使用strcpy、strcat和strlen,但存在跨界风险。C++引入了<std::string>,提供安全便捷的字符串操作,能动态调整大小,避免了内存管理的问题。

C语言中,对字符串的处理(复制和拼接),一般使用strcpy(字符数复制函数),strcat(字符串拼接函数)等函数,用strlen来查看字符串的长度。 而这些函数使用时具有极高的风险,它们会寻找字符串结束符‘\0’, 如何使用C语言字符串,且忘记了在字符串后面添加结束符,将会出现跨界的风险。

现在C++提供了std::string, 它的头文件为#include <string>, std::string, 可以非常方便的对字符串进行处理,它是一个动态的,它会根据需要存储的字符串大小改变自身大小。

#include <iostream>
#include <string>

//using namespace std;

int main()
{
	std::string start("123"); //定义字符串变量, 并初始化
	std::cout << "start = " << start << " start len = " << start.length() << std::endl; //length()函数计算字符串长度
	
	std::string one;  //定义,但没有进行初始化
	getline(std::cin, one); //通过getline()函数初始化字符串变量one
	std::cout << "one = " << one << " one len = " << one.length() << std::endl
C++ 中,`std::string` 提供了 `replace()` 方法用于替换字符串中的部分内容。该方法可以指定起始位置和长度,并用另一个字符串来替换对应区域的内容。 下面是一个使用 `std::string::replace()` 的完整示例: ```cpp #include <iostream> #include <string> int main() { std::string str = "hello world"; std::size_t pos = str.find("world"); if (pos != std::string::npos) { str.replace(pos, 5, "C++"); // 将 "world" 替换为 "C++" } std::cout << "替换后的字符串是:" << str << std::endl; } ``` 上述代码中,`find()` 用于查找目标子串 `"world"` 的起始位置,如果找到,则使用 `replace()` 进行替换。其中 `pos` 是替换的起始位置,`5` 表示被替换子串的长度(即 `"world"` 的长度),`"C++"` 是新的替换内容[^2]。 此外,`replace()` 也支持多种重载形式,例如通过迭代器范围进行替换: ```cpp #include <iostream> #include <string> int main() { std::string str = "The quick brown fox jumps over the lazy dog"; std::string oldStr = "brown"; std::string newStr = "red"; std::size_t pos = str.find(oldStr); if (pos != std::string::npos) { str.replace(pos, oldStr.length(), newStr); // 将 "brown" 替换为 "red" } std::cout << str << std::endl; } ``` 此代码将 `"brown"` 替换为 `"red"`,适用于需要动态计算旧字符串长度的情况。 ### 注意事项 - 使用 `replace()` 前应确保目标子串存在,通常配合 `find()` 检查位置。 - 若需替换所有匹配项(如多个相同子串),则需要循环处理或结合正则表达式实现。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值