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

编写接收用户输入并去除所有空格的C++程序存在Bug求助

修复C++字符串去空格代码的Bug

原代码的核心问题出在结果数组ccc的赋值逻辑上:你用遍历原数组c的下标j直接给ccc赋值,遇到空格时continue跳过赋值,但j仍会持续递增。这导致ccc中对应原字符串空格的位置残留内存垃圾值,且有效字符没有紧凑存储,最终输出出现乱码或截断。

以下是修复后的代码:

#include<iostream>
using namespace std;

int main(){
    int i = 0;
    int j = 0;
    int k = 0; // 新增独立下标,专门跟踪ccc的写入位置
    char c[30];
    char cc[30];
    char ccc[30];
    
    cin.getline(c, 30);
    
    // 复制原字符串到cc(这部分逻辑无需改动)
    while (c[i] != '\0')
    {
        cc[i] = c[i];
        i++;
    }
    cc[i] = '\0'; 
    
    // 修复后的去空格逻辑
    for (j = 0; j < i; j++){
        if (c[j] == ' ')
        {
            continue; // 遇到空格直接跳过
        }
        ccc[k++] = c[j]; // 非空格字符写入ccc,同时更新写入下标
    }
    ccc[k] = '\0'; // 在有效字符末尾添加字符串结束符
    
    cout << cc << '\n' << ccc << endl;
    return 0;
}

关键修改说明

  • 新增k变量独立管理ccc的写入位置,只有遇到非空格字符时才执行赋值并递增k,确保有效字符紧凑排列,不会留下空位。
  • 最终在k的位置添加'\0',保证ccc是合法的C风格字符串,避免输出时读取到内存垃圾值。

测试验证

  • 输入ad jq jjwjfwwf,输出原字符串ad jq jjwjfwwf和去空格后的adjqjjwjfwwf
  • 输入dadad fff,输出原字符串dadad fff和去空格后的dadadfff

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:32:44