C++知识——7、c++ append()函数用法

本文详细介绍了C++中string类的append函数用法,包括如何将C-string、string及它们的一部分添加到现有string的末尾,以及如何在string后添加多个相同字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

append函数

向string的后面追加字符或字符串

一、向string的后面加C-string

string s = “hello “; const char *c = “out here “; 
s.append(c); // 把c类型字符串s连接到当前字符串结尾 
s = “hello out here”; 

二、向string的后面加C-string的一部分

string s=”hello “;const char *c = “out here “; 
s.append(c,3); // 把c类型字符串s的前n个字符连接到当前字符串结尾 
s = “hello out”; 

三、向string的后面加string

string s1 = “hello “; string s2 = “wide “; string s3 = “world “; 
s1.append(s2); s1 += s3; //把字符串s连接到当前字符串的结尾 
s1 = “hello wide “; s1 = “hello wide world “; 

四、向string的后面加string的一部分

string s1 = “hello “, s2 = “wide world “; 
s1.append(s2, 5, 5); ////把字符串s2中从5开始的5个字符连接到当前字符串的结尾 
s1 = “hello world”; 
string str1 = “hello “, str2 = “wide world “; 
str1.append(str2.begin()+5, str2.end()); //把s2的迭代器begin()+5和end()之间的部分连接到当前字符串的结尾 
str1 = “hello world”; 

五、向string后面加多个字符

string s1 = “hello “; 
s1.append(4,’!’); //在当前字符串结尾添加4个字符! 
s1 = “hello !!!!”;
<think>我们正在讨论C++中`insert`和`append`函数的使用方法。这两个函数都是`std::string`类的成员函数,用于在字符串中插入或追加内容。###1.`append`函数`append`函数用于在字符串的末尾追加字符或字符串。它有多个重载版本,这里介绍几个常用的:####常用重载版本:1.**追加另一个字符串**`basic_string&append(constbasic_string&str);`示例:```cppstd::stringstr="Hello";std::stringappendStr="World";str.append(appendStr);//str变为"HelloWorld"```2.**追加C风格字符串**`basic_string&append(constchar*s);`示例:```cppstd::stringstr="Hello";str.append("World");//str变为"HelloWorld"```3.**追加字符串的一部分**`basic_string&append(constchar*s,size_typen);`追加C风格字符串的前n个字符。示例:```cppstd::stringstr="Hello";str.append("World!!!",6);//追加前6个字符,即"World",结果为"HelloWorld"```4.**追加多个相同字符**`basic_string&append(size_typen,charc);`示例:```cppstd::stringstr="Hello";str.append(3,'!');//追加3个'!',结果为"Hello!!!"```5.**使用迭代器范围追加**`template<classInputIt>basic_string&append(InputItfirst,InputItlast);`示例:```cppstd::stringstr="Hello";std::stringappendStr="World";str.append(appendStr.begin(),appendStr.end());//结果为"HelloWorld"```####注意:-`append`函数返回当前字符串的引用,因此可以链式调用。-也可以使用运算符`+=`实现类似功能,但`append`可以更灵活地控制追加的内容(如部分字符串)。###2.`insert`函数`insert`函数用于在字符串的指定位置插入字符或字符串。同样有多个重载版本:####常用重载版本:1.**在指定位置插入另一个字符串**`basic_string&insert(size_typeindex,constbasic_string&str);`示例:```cppstd::stringstr="HelloWorld";std::stringinsertStr="C++";str.insert(6,insertStr);//在位置6(从0开始)插入,结果为"HelloC++World"```2.**在指定位置插入C风格字符串**`basic_string&insert(size_typeindex,constchar*s);`示例:```cppstd::stringstr="HelloWorld";str.insert(6,"C++");//结果为"HelloC++World"```3.**在指定位置插入字符串的一部分**`basic_string&insert(size_typeindex,constchar*s,size_typen);`插入C风格字符串的前n个字符。示例:```cppstd::stringstr="HelloWorld";str.insert(6,"C++Programming",4);//插入前4个字符,即"C++",结果为"HelloC++World"```4.**在指定位置插入多个相同字符**`basic_string&insert(size_typeindex,size_typen,charc);`示例:```cppstd::stringstr="HelloWorld";str.insert(5,3,'!');//在位置5(即'o'后面)插入3个'!',结果为"Hello!!!World"```5.**在迭代器指定的位置之前插入一个字符**`iteratorinsert(iteratorpos,charc);`示例:```cppstd::stringstr="HelloWorld";str.insert(str.begin()+5,'!');//在位置5处插入'!',结果为"Hello!World"```6.**在迭代器指定的位置之前插入多个相同字符**`voidinsert(iteratorpos,size_typen,charc);`示例:```cppstd::stringstr="HelloWorld";str.insert(str.begin()+5,3,'!');//在位置5处插入3个'!',结果为"Hello!!!World"```7.**在迭代器指定的位置之前插入一个字符序列(使用迭代器范围)**`template<classInputIt>voidinsert(iteratorpos,InputItfirst,InputItlast);`示例:```cppstd::stringstr="HelloWorld";std::stringinsertStr="C++";str.insert(str.begin()+5,insertStr.begin(),insertStr.end());//在位置5处插入"C++",结果为"HelloC++World"```####注意:-插入位置`index`是从0开始计数的,如果`index`超出字符串长度(大于当前字符串长度),会抛出`std::out_of_range`异常。-使用迭代器指定位置时,要确保迭代器有效(例如`str.begin()+pos`中的`pos`不能超过字符串长度)。###示例代码以下是一个综合示例,展示`append`和`insert`的用法:```cpp#include<iostream>#include<string>intmain(){//使用appendstd::stringstr1="Hello";str1.append("World");//追加C字符串std::cout<<"Afterappend:"<<str1<<std::endl;//输出:HelloWorld//使用insertstd::stringstr2="HelloWorld";str2.insert(6,"C++");//在位置6插入std::cout<<"Afterinsert:"<<str2<<std::endl;//输出:HelloC++World//链式调用std::stringstr3="Start";str3.append(3,'!').insert(5,"End");std::cout<<"Chaining:"<<str3<<std::endl;//输出:Start!!!Endreturn0;}```输出:```Afterappend:HelloWorldAfterinsert:HelloC++WorldChaining:Start!!!End```###总结-**`append`**:用于在字符串末尾添加内容,有多种形式(字符串、子串、重复字符等)。-**`insert`**:用于在字符串任意位置插入内容,同样有多种形式,但需要指定位置(索引或迭代器)。使用这两个函数可以灵活地构建和修改字符串。§§相关问题§§1.C++中除了`append`和`insert`,还有哪些常用的字符串操作函数?2.如何高效地拼接多个字符串?3.C++中`std::string`和C风格字符串如何相互转换?</think>### C++中`insert`和`append`函数使用方法详解 #### 一、`append`函数(字符串追加) 用于在字符串末尾添加内容,有多个重载版本: 1. **追加整个字符串** ```cpp std::string str = "Hello"; str.append(" World"); // 结果:"Hello World" ``` 2. **追加字符串的一部分** 语法:`append(const char* str, size_type n)` ```cpp std::string str = "Hello"; str.append(" World!!!", 6); // 取前6个字符:" World" [^3] // 结果:"Hello World" ``` 3. **追加多个相同字符** ```cpp std::string str = "Hi"; str.append(3, '!'); // 结果:"Hi!!!" ``` 4. **使用迭代器追加** ```cpp std::string base = "Number: "; std::vector<char> nums {'1', '2', '3'}; base.append(nums.begin(), nums.end()); // 结果:"Number: 123" ``` #### 二、`insert`函数(指定位置插入) 用于在字符串任意位置插入内容: 1. **在指定位置插入字符串** ```cpp std::string str = "HelloWorld"; str.insert(5, " C++ "); // 位置5插入 // 结果:"Hello C++ World" ``` 2. **插入子字符串的一部分** 语法:`insert(size_type pos, const char* s, size_type n)` ```cpp std::string str = "ABCDEF"; str.insert(2, "XYZ", 2); // 在位置2插入"XY" // 结果:"ABXYCDEF" ``` 3. **插入多个相同字符** ```cpp std::string str = "abc"; str.insert(1, 3, '-'); // 位置1插入3个'-' // 结果:"a---bc" ``` 4. **使用迭代器插入单个字符** ```cpp std::string str = "12345"; str.insert(str.begin() + 2, 'X'); // 迭代器位置插入 // 结果:"12X345" ``` #### 三、关键区别与使用场景 | 特性 | `append` | `insert` | |--------------|-------------------------|---------------------------| | **插入位置** | 只能追加到末尾 | 可在任意指定位置插入 | | **性能** | $O(1)$~$O(n)$ 平均更快 | $O(n)$ 可能需要移动元素 | | **常用场景** | 字符串拼接 | 字符串中间插入内容 | | **返回值** | 返回当前字符串的引用 | 返回当前字符串的引用 | #### 四、综合示例 ```cpp #include <iostream> #include <string> int main() { std::string text = "Start"; // 追加操作 text.append(" Middle"); text.append(3, '!'); // "Start Middle!!!" // 插入操作 text.insert(6, "Real "); // 位置6插入 // 结果:"Start Real Middle!!!" std::cout << text; return 0; } ``` #### 五、注意事项 1. **位置有效性**:`insert`的位置参数必须在$[0, \text{str.length()}]$范围内,否则抛出`std::out_of_range`异常 2. **迭代器失效**:插入操作可能使迭代器失效,需重新获取 3. **性能考虑**:频繁在字符串开头插入时,考虑使用`std::deque<char>`更高效 4. **C字符串处理**:处理C风格字符串时需确保以`\0`结尾[^3] > **最佳实践**:对于复杂字符串操作,结合使用`append`和`insert`,并优先使用`std::string`成员函数而非C字符串函数以提高安全性[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值