编写接收用户输入并去除所有空格的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
相关产品推荐
相关产品推荐

