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

