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
相关产品推荐
相关产品推荐

