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

C++二维数组问题:如何存储用户输入并实现升降序排序

嗨,我来帮你搞定这个问题!你现在的核心问题是不知道怎么把用户输入的内容存进二维数组里,其实这部分逻辑很直观,咱们一步步来:

首先,不管是静态数组还是动态数组,接收用户输入的核心都是嵌套循环遍历数组的每一个元素,然后用cin把输入值存进去。不过考虑到用户输入的数组大小可能不固定,我更推荐用vector来创建动态二维数组,比静态数组更灵活也更符合C++的标准写法。

下面是完整的示例代码,包含了「接收用户输入→输出原始数组→升序/降序排序」的完整流程,我会在代码里加注释帮你理解:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int rows, cols;

    // 先让用户指定二维数组的行数和列数
    cout << "请输入二维数组的行数: ";
    cin >> rows;
    cout << "请输入二维数组的列数: ";
    cin >> cols;

    // 创建动态二维vector,初始化为rows行cols列的结构
    vector<vector<int>> arr(rows, vector<int>(cols));

    // 嵌套循环接收每个位置的用户输入
    cout << "请输入" << rows * cols << "个数字,按行依次输入即可:" << endl;
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            // 把用户输入的数值存入arr[i][j]这个位置
            cin >> arr[i][j];
        }
    }

    // 先输出一遍用户输入的原始数组,确认存储成功
    cout << "\n你输入的二维数组如下:" << endl;
    for (const auto& row : arr) {
        for (int num : row) {
            cout << num << " ";
        }
        cout << endl;
    }

    // 接下来是排序部分,这里提供两种常见的排序方式:

    // 方式1:把二维数组"扁平化"成一维数组,整体进行升序/降序排序
    vector<int> flatArr;
    for (const auto& row : arr) {
        flatArr.insert(flatArr.end(), row.begin(), row.end());
    }

    // 升序排序
    sort(flatArr.begin(), flatArr.end());
    cout << "\n整体升序排序后的结果:" << endl;
    for (int num : flatArr) {
        cout << num << " ";
    }
    cout << endl;

    // 降序排序(用greater<int>()指定排序规则)
    sort(flatArr.begin(), flatArr.end(), greater<int>());
    cout << "\n整体降序排序后的结果:" << endl;
    for (int num : flatArr) {
        cout << num << " ";
    }
    cout << endl;

    // 方式2:保持二维结构,对每一行单独进行升序排序
    cout << "\n每行单独升序排序后的二维数组:" << endl;
    vector<vector<int>> rowSortedArr = arr;
    for (auto& row : rowSortedArr) {
        sort(row.begin(), row.end());
    }
    for (const auto& row : rowSortedArr) {
        for (int num : row) {
            cout << num << " ";
        }
        cout << endl;
    }

    return 0;
}

关键部分解释:

  • 输入存储:嵌套的for循环里,i代表行号,j代表列号,cin >> arr[i][j]就是把用户输入的数值直接存入二维数组对应的位置,这一步就是你之前缺失的核心逻辑。
  • 动态数组:用vector<vector<int>>创建的二维数组可以根据用户输入的行数和列数动态调整大小,比固定大小的静态数组(比如int arr[5][5])更实用。
  • 排序逻辑:sort函数是C++标准库提供的排序工具,默认是升序;如果要降序,只需要传入greater<int>()作为第三个参数即可。如果需要对整个二维数组排序,先把它转成一维数组会更方便。

如果你之前用的是固定大小的静态数组,接收输入的逻辑是一样的,比如你定义了int arr[3][3];,那只需要把上面代码里的vector部分换成静态数组的定义,嵌套循环接收输入的部分完全相同。

试试这段代码,应该就能解决你无法存储用户输入的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:32:18