C++ sting中不知道的知识四——string类

本文详细介绍了C++标准库中string类的一些常用方法,包括append、replace、copy和swap等函数的应用实例,并解释了length和size的区别。

  需加入#include <string>

  string类中包含length和size函数,都是求出该字符串的长度,区别在模板STL

  append合并函数:第一个参数为需要连接的字符串,第二个参数为从第几个字符开始,第三个参数为需要合并的数量。

  replace函数:第一个参数为需要替换的字符串的开始位置,第二个参数为需要替换的个数,第三个参数为字符串,第四个参数为第三个参数的起始位置,第五个参数为个数

                            replace的重载函数支持char[]和char.

 copy函数:第一个参数为目的字符串,第二个参数为拷贝的个数,第三个参数为起始位置

 swap函数:将两个字符串交换

string str1 = "abc";

string str2 = "efg";

char str3 = 'T';

char str4[] = "hij"; 

str1.append(str2,1,1); //输出str1: abcf

str1.replace(0,1,str2,0,2); //输出str1:efbc

str1.replace(0,1,str4,0,2); //输出str1:hibc

str1.replace(0,2,2,str3); //输出str1:TTc

str1.copy(str4,2,0);//输出str4字符串为:abj  注意:第二个参数一定小于第一个参数的长度,否则乱码

<think>我们正在讨论C++中的`std::string`型及其相关函数和使用方法。根据用户需求,我们需要总结string型的常用函数和使用方法,并参考之前的引用内容。 之前的引用[1][2][3]提供了关于string的一些函数示例和构造方法,我们将在此基础上扩展。 主要分为以下几个部分: 1. string的构造和初始化 2. string的常用成员函数(修改、访问、比较等) 3. string的非成员函数(运算符重载、getline等) 4. 使用示例 5. 注意事项 注意:引用标识要自然地添加在引用内容的末尾。 我们开始组织答案。 </think>### C++中`std::string`函数及使用方法详解 `std::string`是C++标准库提供的字符串,封装了高效的字符串操作。以下结合引用内容分说明核心函数及用法: --- #### 一、构造与初始化(参考引用[2]) ```cpp string s1; // 空字符串 string s2("Hello"); // 从C字符串构造 string s3(5, 'A'); // "AAAAA"(重复字符) string s4 = s2; // 复制构造 string s5(s2, 1, 3); // "ell"(从索引1开始取3字符) string s6("ABCDE", 3); // "ABC"(取前3字符)[^2] ``` --- #### 二、常用成员函数 1. **修改操作** ```cpp string s = "Hello"; s.append(" World"); // "Hello World"(追加) s.insert(5, "###"); // "Hello### World"(插入)[^1] s.erase(5, 3); // "Hello World"(删除从索引5起的3字符)[^1] s.replace(6, 5, "C++"); // "Hello C++"(替换子串) ``` 2. **访问与搜索** ```cpp s.front(); // 'H'(首字符) s.back(); // 'd'(尾字符)[^3] s.find("lo"); // 返回3(子串首次出现位置) s.substr(3, 4); // "lo W"(截取子串) ``` 3. **容量操作** ```cpp s.resize(8); // 调整大小为8(多余截断) s.reserve(100); // 预留100字节内存(避免重复分配) s.empty(); // 检查是否为空 s.size(); // 获取字符数量 ``` 4. **比较操作**(字典序) ```cpp string a = "apple", b = "banana"; a.compare(b); // 返回负值(a < b) if (a == "apple") { ... } // 运算符重载[^1] ``` --- #### 三、非成员函数 ```cpp // 输入输出 string s; cin >> s; // 读取单词(空格分隔) getline(cin, s); // 读取整行(含空格)[^1] // 运算符重载 string sum = "A" + string("B"); // "AB" cout << sum; // 直接输出 ``` --- #### 、高效使用技巧 1. **避免临时对象** ```cpp void process(const string& s) { ... } // 传引用避免复制 ``` 2. **预分配内存** ```cpp string result; result.reserve(1000); // 避免多次扩容 for (auto& str : vec) result += str; ``` 3. **C风格互操作** ```cpp char buffer[20]; string s = "Test"; strcpy(buffer, s.c_str()); // 转为C字符串复制 ``` --- #### 五、注意事项 1. **线程安全**:`c_str()`返回的指针在字符串修改后失效 2. **编码问题**:`std::string`处理UTF-8,需用`std::u8string`(C++20) 3. **性能陷阱**:连续`operator+=`可能引发多次内存重分配(用`reserve()`优化) --- ### 对比示例:删除控制字符 ```cpp // 使用string(安全但可能低效) string remove_ctrl_str(string s) { for (size_t i=0; i<s.length(); ) { if (s[i] < 0x20) s.erase(i,1); else ++i; } return s; } // 指针操作(高效但需谨慎) void remove_ctrl_cstr(char* dest, const char* src, size_t len) { while (len--) if (*src >= 0x20) *dest++ = *src; *dest = '\0'; } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值