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

C++读取用户输入数字时如何忽略整数数组中的空格以正确实现反转

代码问题排查与修复

核心错误点

  • 动态数组语法错误:int *arr = new int(z);实际是创建了一个值为z的int类型指针,并非长度为z的数组,正确数组创建语法为int *arr = new int[z];,且原代码中从未使用该数组,属于冗余代码。
  • 带空格输入解析错误:你先用getline(cin, n)读取了整行输入,但直接调用stoi(n)转换时,只会读取第一个空格前的内容转成整数,输入带空格的内容时会直接丢失后续数据,这是错误的核心诱因。
  • 循环逻辑混乱:for循环的循环变量x在循环体内被直接赋值修改,同时循环条件x<=z不符合数组遍历逻辑,会导致循环次数完全不可控。
  • 反转变量未重置:反转计数变量rev定义在循环外部,每次处理新的数字时没有重置为0,多个数字的反转结果会叠加出错。

修复后代码

场景1:读取一行带空格的数字,将每个数字单独反转后输出(输入1 2 3 4输出4 3 2 1)

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()  
{  
    string n, y;
    // 读取整行输入
    getline(cin, n);
    // 用字符串流拆分带空格的内容
    istringstream ss(n);
    // 逐个读取每个数字字符串处理
    while (ss >> y) {
        int x = stoi(y);
        int rev = 0, rem;
        while(x != 0) {
            rem = x % 10;
            rev = rev * 10 + rem;
            x /= 10;
        }
        cout << rev << " ";
    }
    return 0;
}

场景2:反转整个数组的输出顺序(输入1 2 3 4输出4 3 2 1)

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;

int main()  
{  
    string n;
    getline(cin, n);
    istringstream ss(n);
    vector<int> arr;
    int num;
    while (ss >> num) {
        arr.push_back(num);
    }
    reverse(arr.begin(), arr.end());
    for (int i = 0; i < arr.size(); i++) {
        cout << arr[i] << " ";
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 02:57:03