C++字符串中'\0'未终止字符串致输出空格问题求助
问题分析与解决
你的代码问题出在C++ std::string和C风格字符串的本质区别上:
- C风格字符串依赖
'\0'作为结束标志,但std::string内部通过成员变量管理字符串长度,不会因为某个位置是'\0'就缩短自身长度。
当测试用例是"52"时:
- 你找到索引
i=0的字符'5'是奇数,然后将num[1]设为'\0'。 - 此时std::string的长度仍然是2,返回的字符串实际包含两个字符:
'5'和'\0'。 - 输出或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
相关产品推荐
相关产品推荐

