【String】 常用库函数系列一(替换(replace),删除(erase),取子串(substr) )

C++ String库函数详解:replace, erase, substr
本文详细介绍了C++中String对象的三个常用操作:replace用于替换字符串部分,erase用于删除字符串部分,而substr则用于获取字符串的子串。每个函数的参数及其用法通过实例进行了清晰的解释,帮助读者更好地理解和应用这些函数。

导航

String:: replace

string (1)  
string& replace (size_t pos,  size_t len,  const string& str);
string& replace (iterator i1, iterator i2, const string& str);
substring (2)   
string& replace (size_t pos,  size_t len,  const string& str,
                 size_t subpos, size_t sublen);
c-string (3)    
string& replace (size_t pos,  size_t len,  const char* s);
string& replace (iterator i1, iterator i2, const char* s);
buffer (4)  
string& replace (size_t pos,  size_t len,  const char* s, size_t n);
string& replace (iterator i1, iterator i2, const char* s, size_t n);
fill (5)    
string& replace (size_t pos,  size_t len,  size_t n, char c);
string& replace (iterator i1, iterator i2, size_t n, char c);
range (6)   
template <class InputIterator>
  <
### C++ STL `string` 类成员函数列表 #### 构造与赋值 - **构造函数**: 创建个新的字符串对象[^1]。 ```cpp std::string str; ``` - **operator=()**: 赋值运算符重载,用于复制另个字符串的内容到当前实例中[^2]。 #### 容量管理 - **empty()**: 判断字符串是否为空[^3]。 ```cpp bool isEmpty = str.empty(); ``` - **size(), length()**: 返回字符串长度[^4]。 ```cpp size_t len = str.size(); // 或者 size_t len = str.length(); ``` - **max_size()**: 获最大可能的字符串大小[^5]。 ```cpp size_t maxSize = str.max_size(); ``` - **capacity()**: 查询分配给此字符串的空间字节数[^6]。 ```cpp size_t cap = str.capacity(); ``` - **reserve(size_type res_arg)**: 请求至少能够容纳指定数量字符的新空间[^7]。 ```cpp str.reserve(newCapacity); ``` - **shrink_to_fit()**: 尝试减少已分配但未使用的内存[^8]。 ```cpp str.shrink_to_fit(); ``` #### 元素访问 - **operator[]**, **at()**: 访问特定位置上的单个字符;区别在于后者越界时抛异常而前者不会[^9]。 ```cpp char ch1 = str[0]; char ch2 = str.at(0); // 如果索引超出范围则抛出 std::out_of_range 异常 ``` - **front()**, **back()**: 分别获首尾字符[^10]。 ```cpp char firstChar = str.front(); char lastChar = str.back(); ``` - **data()**: 提供指向内部存储区起始地址的指针[^11]。 ```cpp const char* ptr = str.data(); ``` #### 修改器 - **assign()**: 替换整个字符串内容[^12]。 ```cpp str.assign("new content"); ``` - **insert(pos, s)**: 插入子串`s`至位置`pos`处[^13]。 ```cpp str.insert(position, "to insert"); ``` - **erase(pos, count)**: 删除从`pos`开始的`count`个字符[^14]。 ```cpp str.erase(startPos, numCharsToRemove); ``` - **clear()**: 清除所有字符使字符串变为空[^15]。 ```cpp str.clear(); ``` - **push_back(c), pop_back()**: 添加/移除最后个字符[^16]。 ```cpp str.push_back('a'); str.pop_back(); ``` - **append(s), +=s**: 追加另字符串或字符到现有字符串后面[^17]。 ```cpp str.append(anotherStr); // or equivalently: str += anotherStr; ``` - **replace(i, n, s)**: 使用新字符串替换掉原字符串中的部分[^18]。 ```cpp str.replace(index, numToReplace, replacementText); ``` #### 字符串操作 - **copy(dest, count[, pos])**: 复制最多`count`个字符到目标缓冲区`dest`中[^19]。 ```cpp char buffer[10]; str.copy(buffer, sizeof(buffer)-1, startPos); buffer[sizeof(buffer)-1]='\0'; // 确保null终止 ``` - **substr(pos=0, n=npos)**: 提子串[^20]。 ```cpp std::string sub = str.substr(offset, length); ``` - **compare(other)**: 对两个字符串进行比较返回整数值表示关系[^21]。 ```cpp int cmpResult = str.compare(str2); if(cmpResult<0){ /* ... */ } else if(cmpResult>0){ /* ... */} else { /* equal strings*/ } ``` #### 查找和替换 - **find(sub, pos=0)**: 寻找首次出现的位置[^22]。 ```cpp size_t foundAt = str.find(searchForThisSubstring); ``` - **rfind(sub, pos=npos)**: 同上但从右向左搜索[^23]。 ```cpp size_t rFoundAt = str.rfind(searchForThisSubstring); ``` - **find_first_of(chars, pos=0)**: 找到任意个属于集合`chars`内的字符第次出现的地方[^24]。 ```cpp size_t indexFirstOfAnyInSet = str.find_first_of(setOfCharacters); ``` - **find_last_of(chars, pos=npos)**: 上述过程逆序执行[^25]。 ```cpp size_t lastIndexAnyInSet = str.find_last_of(setOfCharacters); ``` - **find_first_not_of(chars, pos=0)**: 和上面相反逻辑,即寻找不属于某个集合作为起点的第个匹配项[^26]。 ```cpp size_t notIndex = str.find_first_not_of(excludeTheseChars); ``` - **find_last_not_of(chars, pos=npos)**: 反转版本[^27]。 ```cpp size_t lastNotIndex = str.find_last_not_of(excludeTheseChars); ``` #### 输入输出流支持 可以直接通过标准输入输出流来进行读写操作[^28]: ```cpp std::cin >> str; // 仅限于空白分隔单词级别的输入 std::getline(std::cin,str); // 整行输入包括空格在内的任何东西直到遇到换行符为止 std::cout << str; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值