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

如何获取字符串中子串最后一个字符的索引?现有方法出现越界

解决字符串子串最后一个字符索引及substr使用问题

首先,子串最后一个字符的正确索引计算方式是:子串首索引 + 子串长度 - 1。因为字符串索引从0开始,比如子串长度为3、首索引是5,那最后一个字符的索引就是5+3-1=7——直接加长度会得到8,这已经超出子串范围,自然会触发越界问题。

再看你写的代码,存在几个核心问题:

  • str2[str2.find(part2) + sizeOfPart2]是取字符串中的单个字符,但substr的第一个参数需要的是起始索引,你传错了参数类型。
  • substr的第二个参数是截取的长度,你传的str2.find(part3)是part3的首索引,逻辑完全错误。
  • 那两段“长度为1就设为0”的代码完全没必要,反而会破坏正常的长度计算逻辑。

修正后的逻辑和代码示例如下:

size_t part2Start = str2.find(part2);
size_t part3Start = str2.find(part3);

// 先检查子串是否存在、位置顺序是否合理,避免无效计算
if (part2Start != string::npos && part3Start != string::npos && part2Start < part3Start) {
    // 计算part2最后一个字符的索引
    size_t part2End = part2Start + part2.length() - 1;
    // 截取part2结束后到part3开始前的内容
    string result = str2.substr(part2End + 1, part3Start - (part2End + 1));
    cout << result << endl;
} else {
    cout << "子串未找到或位置顺序错误" << endl;
}

注意:必须判断find的返回值是否为string::npos,如果子串不存在,直接进行索引计算会导致程序异常。

内容的提问来源于stack exchange,提问作者Eduard Atoyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:05:26