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

C++字符串单词反转代码触发std::length_error错误的排查请求

字符串单词反转功能的错误排查与修正

问题详情

  • 需求:实现字符串单词反转,例如输入"This is Nice",输出"Nice is This"
  • 运行时抛出错误:
    terminate called after throwing an instance of 'std::length_error'
      what():  basic_string::_M_create
    
  • 原实现代码:
    string reverseWords(string s) {
            vector<string> v;
            string x="";
            for(int i=0;i<s.size();i++)
            {
                if(isspace(s[i]))
                {
                    v.push_back(x);
                    x="";
                    v.push_back(" ");
                    
                }
                else
                {
                    x=x+s[i];
                }
            }
            v.push_back(x);
            x="";
            for(int j=v.size();j>=0;j--) x=x+v[j];
            return x;
        }
    

错误根源

核心问题是vector索引越界:
vector的元素索引范围是0到v.size()-1,但原代码中反转遍历的起始值是j = v.size(),此时访问v[j]会直接访问未定义的内存区域,触发标准库的std::length_error异常。

另外还有个小问题:原代码遇到空格就直接添加空字符串和空格到vector,如果输入有连续空格,会生成多个空元素和连续空格,导致反转后结果混乱。

修正后的代码

string reverseWords(string s) {
    vector<string> v;
    string x = "";
    for (int i = 0; i < s.size(); i++) {
        if (isspace(s[i])) {
            // 只有当前单词非空时,才添加到vector,避免空元素
            if (!x.empty()) {
                v.push_back(x);
                x = "";
            }
            // 避免连续添加空格,保证vector里的空格都是单独的
            if (!v.empty() && v.back() != " ") {
                v.push_back(" ");
            }
        } else {
            x += s[i];
        }
    }
    // 把最后一个未添加的单词加入vector
    if (!x.empty()) {
        v.push_back(x);
    }
    x = "";
    // 从最后一个有效索引开始遍历,避免越界
    for (int j = v.size() - 1; j >= 0; j--) {
        x += v[j];
    }
    return x;
}

关键修改说明

  1. 修复索引越界:反转遍历的起始值改为v.size()-1,遍历到j=0为止,确保只访问vector中存在的元素。
  2. 优化空格处理:添加判断逻辑,避免向vector中插入空字符串和连续空格,保证输出结果的格式正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:30:58