C++中如何实现字符串字符移除(如删除字符串末尾字符)
C++ 移除std::string末尾字符的实现方法
直接用标准库自带的成员函数就能实现需求,不用自己写循环遍历处理,常用的有两种可靠写法:
推荐写法(C++11及以上标准通用)
std::string专门提供了pop_back()方法,作用就是删除字符串的最后一个字符,语义最直观,代码可读性最高:
#include <string> int main() { std::string fruit = "bananas"; // 必须先判空,空字符串调用pop_back会触发未定义行为,大概率直接崩溃 if (!fruit.empty()) { fruit.pop_back(); } // 此时fruit的值就是"banana" return 0; }
兼容老旧编译器的写法
如果使用的编译器版本过老不支持C++11,可以用erase()成员函数实现同样效果,两种传参方式效果完全一致:
std::string fruit = "bananas"; if (!fruit.empty()) { // 写法1:传入最后一个字符的迭代器 fruit.erase(fruit.end() - 1); // 写法2:传入最后一个字符的索引位置 // fruit.erase(fruit.size() - 1); }
避坑提醒
- 不要照搬C风格字符串的思路,手动给
std::string加末尾的'\0'来“截断”。std::string的长度是单独存储的,这种改法不会改变字符串实际长度,输出时还是会带上原最后一个字符,属于典型错误写法。 - 任何删除末尾字符的操作前都必须先判断字符串非空,不要图省事省略判空逻辑。
内容的提问来源于stack exchange,提问作者datguywithlazers
相关产品推荐
相关产品推荐

