移除std::string首尾字符时代码未达预期,求原因及简便实现方法
移除std::string首尾字符时代码未达预期,求原因及简便实现方法
嗨,我来帮你梳理下问题出在哪,再给你几个实用的解决办法~
首先说为什么你的代码没达到预期:你用的std::string::substr函数,第二个参数是要截取的字符长度,不是结束位置的索引哦!
举个例子,你的原字符串是"{abc,def}",它的长度是9(数一下:{、a、b、c、,、d、e、f、})。你写的substr(1, temp.length() - 1)就是从索引1的位置(也就是a)开始,截取8个字符——那刚好会把从a到最后的}都包含进去,结果自然就是"abc,def}"啦。
接下来给你几个正确的实现方式:
- 修正substr参数:既然要去掉首尾各一个字符,那截取的长度应该是原长度减2,代码如下:
temp = temp.substr(1, temp.length() - 2);
- 使用erase方法分步删除:这种写法更直观,一看就知道是删首尾字符:
// 先删除开头的'{' temp.erase(temp.begin()); // 再删除结尾的'}' temp.erase(temp.end() - 1);
如果担心原字符串长度不足2(比如空串或只有一个字符),可以先加个判断:
if (temp.size() >= 2) { temp.erase(temp.begin()); temp.erase(temp.end() - 1); }
- 用迭代器构造新字符串:这种方式一步到位,逻辑非常清晰:
// 直接从原字符串的第二个字符到倒数第二个字符构造新串 temp = std::string(temp.begin() + 1, temp.end() - 1);
同样,记得在实际场景中先判断字符串长度是否足够,避免越界访问。
备注:内容来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

