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

C++字符串中'\0'未终止字符串致输出空格问题求助

问题分析与解决

你的代码问题出在C++ std::string和C风格字符串的本质区别上:

  • C风格字符串依赖'\0'作为结束标志,但std::string内部通过成员变量管理字符串长度,不会因为某个位置是'\0'就缩短自身长度。

当测试用例是"52"时:

  1. 你找到索引i=0的字符'5'是奇数,然后将num[1]设为'\0'。
  2. 此时std::string的长度仍然是2,返回的字符串实际包含两个字符:'5'和'\0'。
  3. 输出或LeetCode判断时,'\0'可能被显示为空格,或者被识别为无效字符但字符串长度仍为2,导致结果不符合预期。

修正后的代码

string largestOddNumber(string num) {
    int i = num.length() - 1;
    while (i >= 0) {
        char c = num[i];
        if (c == '8' || c == '6' || c == '4' || c == '2' || c == '0') {
            i--;
        } else {
            return num.substr(0, i + 1);
        }
    }
    return "";
}

关键修改说明

  • 用num.substr(0, i + 1)直接生成从开头到索引i的子串,这个子串的长度是i+1,完全符合题目要求的"最大奇数数字字符串"。
  • 不需要手动设置'\0',std::string的substr方法会正确生成长度合适的新字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:17:09