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

LeetCode运行C++代码遇字符串比较警告,改单引号仍未解决

问题解决与代码修正

警告原因分析

你遇到的警告是因为代码中把char类型的s[i]和字符串字面量" "(本质是const char*指针)做比较,属于类型不匹配的非法操作,编译器无法确认预期行为,因此抛出警告。

你说替换单引号后问题未解决,大概率是替换不彻底,或是代码还存在其他逻辑错误导致警告残留。

代码核心问题修正

你的代码除了警告外,还有几个致命逻辑错误:

  1. for循环初始值s.size()是无符号整数,和int类型的i做i>=0比较会触发死循环(无符号数永远不会小于0)
  2. while(s[i]!= ' ')未移动i的位置,会陷入无限循环
  3. ans.push_back(st)用法错误,push_back仅能添加单个字符,拼接字符串需用ans += st或ans.append(st)
  4. 未处理连续空格,会生成空字符串混入结果

修正后的代码如下:

#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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:42:56