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

C++递归删除字符串相邻重复字符代码for循环运行报错问题

问题本质

你遇到的运行时错误核心是C++无符号整数下溢导致的数组越界访问,具体逻辑如下:

  • C++中std::string的size()方法返回值为size_t类型,属于无符号整数,运算结果永远不会为负,若减法运算出现负数结果,会发生下溢转为对应位数的最大无符号正整数。
  • 当输入字符串长度为1时,s.size()的返回值为1:
    • 原for循环判定条件为j <= s.size() - 2,此时s.size() - 2 = 1 - 2 = -1,无符号运算下会转为极大的正数值(32位环境下为4294967295)。
    • 循环变量j初始值为0,0 <= 极大正整数判定结果为真,for循环会错误进入执行。
    • 循环体内访问s[j+1]即s[1],但长度为1的字符串合法下标只有0,越界访问非法内存直接触发运行时错误。
  • 替换为j < s.size() - 1后,当字符串长度为1时,s.size() -1 = 0,0 < 0判定结果为假,for循环不会执行,自然不会出现越界问题。

优化建议

为了彻底规避无符号数下溢风险,可以将循环条件修改为j + 1 < s.size(),不需要做无符号数的减法运算,逻辑可读性和兼容性都更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:03