LeetCode运行C++代码遇字符串比较警告,改单引号仍未解决
问题解决与代码修正
警告原因分析
你遇到的警告是因为代码中把char类型的s[i]和字符串字面量" "(本质是const char*指针)做比较,属于类型不匹配的非法操作,编译器无法确认预期行为,因此抛出警告。
你说替换单引号后问题未解决,大概率是替换不彻底,或是代码还存在其他逻辑错误导致警告残留。
代码核心问题修正
你的代码除了警告外,还有几个致命逻辑错误:
for循环初始值s.size()是无符号整数,和int类型的i做i>=0比较会触发死循环(无符号数永远不会小于0)while(s[i]!= ' ')未移动i的位置,会陷入无限循环ans.push_back(st)用法错误,push_back仅能添加单个字符,拼接字符串需用ans += st或ans.append(st)- 未处理连续空格,会生成空字符串混入结果
修正后的代码如下:
#include <algorithm> #include <string> using namespace std; string reverseWords(string s) { // 先去除首尾空格,减少无效处理 int left = 0, right = s.size() - 1; while (left <= right && s[left] == ' ') left++; while (left <= right && s[right] == ' ') right--; string ans = ""; string st = ""; // 从有效字符末尾向前遍历 for (int i = right; i >= left; i--) { if (s[i] != ' ') { st += s[i]; } else { // 仅当收集到字符时才处理单词 if (!st.empty()) { reverse(st.begin(), st.end()); ans += st + " "; st.clear(); } // 跳过连续空格 while (i >= left && s[i] == ' ') i--; i++; // 回退一位,抵消for循环的i-- } } // 处理最后一个未拼接的单词 if (!st.empty()) { reverse(st.begin(), st.end()); ans += st; } return ans; }
关键修正点说明
- 所有空格统一改为单引号包裹的
' ',确保和char类型的s[i]类型匹配 - 新增首尾空格清除逻辑,避免无效处理
- 调整
for循环遍历范围,从有效字符的末尾开始 - 在循环内移动
i的位置,避免无限循环 - 替换错误的
push_back为字符串拼接操作 - 新增连续空格处理逻辑,避免结果出现多余空格
内容的提问来源于stack exchange,提问作者piranha
相关产品推荐
相关产品推荐

