You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:52:57