替换2D数组中的值

时间:2013-11-06 19:33:27

标签: c++

我必须创建一个程序,允许用户填写订单4的(部分)拉丁方。您可以使用0来表示空单元格。用户将给出要放置的数字,行和列。只有在不违反部分拉丁方的属性且不应重写已放置的数字时,才应放置该数字。

我有一个矩阵,现在输出全零。接下来我必须用用户输入的内容替换每个值。问题是我不知道该怎么做。

这是我的代码:

#include <iostream>
using namespace std;

const int ORDER = 4;
void fill (int m[], int order);
void outputMatrix (int m[], int order);
void replaceValue (int m[], int order, int n, int row, int column);

int main(){
    int matrix[ORDER];
    int row;
    int column;
    int n;
    fill (matrix, ORDER);
    outputMatrix (matrix, ORDER);
    do {
    cout << "Enter the number to place, the row and the column, each seperated by a space: ";
    cin >> n;
    cin >> row;
    cin >> column;

    }while (n > 0 || n <= ORDER);
    if (n <= 0 || n >= ORDER){
        cout << "Thank you";
        cout << endl;
    }

    return 0;
}


void fill (int m[], int order){
   for (int i = 0; i < order*order; i++){
        m[i] = 0;
   }
}

void outputMatrix (int m[], int order){
    int c = 0;
    for (int i = 0; i < order*order; i++){
         c++;
            cout << m[i] << ' ';
            if (c == order){
                cout << endl;
                c = 0;
            }
        }
        cout << endl;   
}

void replaceValue (int m[], int order, int n, int row, int column){
    for (int i = 0; i < order; i++){
        m[order] = m[row][column];
        m[row][column] = n;
    }
}

如何在C ++中替换Matrix中的值?

3 个答案:

答案 0 :(得分:1)

如果你有一个矩阵,矩阵[row] [col] =值;会做的伎俩。但是,我看到你分配了一个数组。一定要看看这个。

编辑:

我仔细看了你的代码,你做错了。

第一: 矩阵[订购] 将创建一个ORDER值的单个数组。如果你想和ORDER按ORDER矩阵试试: 矩阵[订购] [订购]

第二: 你在打电话:

void fill (int m[], int order){
    for (int i = 0; i < order*order; i++){
        m[i] = 0;
    }
}

大小为4且order == 4.这将在数组外循环并给你带来问题。

尝试类似:

matrix[ORDER][ORDER];
for (int row = 0; row != ORDER; ++row)
{
    for (int col = 0; col != ORDER; ++col)
    {
        matrix[row][col] = 0;
    }
}

希望这有帮助。

答案 1 :(得分:0)

如果将arr[i][j]定义为arr,则无法真正写arr[]。没有关于行长度的信息(有多少列)。

您可以使用arr[][4]类型的数组,并按如下方式编写函数:

// The & is to pass by reference.
void print(int (&arr)[][4], int length)
{
    for(int i = 0; i < length; i++) {
        for(int j = 0; j < 4; j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
}

但在我看来,对于像这样的低阶多维数组,使用typedef作为向量矢量是更好的选择:

typedef vector<vector<int> > Matrix;
void print(Matrix& arr)
{
    for(int i = 0; i < arr.size(); i++) {
        for(int j = 0; j < arr[i].size(); j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
}

在任何一种情况下,写arr[i][j] = k都会表现得像你期望的那样。

答案 2 :(得分:0)

清除/清零矩阵的最简单方法是:

memset( &matrix, 0, sizeof(matrix));

- )