c语言 - 功能。2 个 2D 数组,第二个满 0,应用条件后,将整行从第一个 2D 数组复制到第二个 2D 数组



例如,我有两个数组,一个是

0 -1 1 0 1
0 -1 0 0 0
0 1 1 -1 0
0 0 0 -1 0
0 -1 0 1 0

第二个全是0。在满足条件a[i][j] == -1 && a[i][k] == 1(k=j+1)之后,我需要复制整行并将其放入第二个数组,因此结果应该是:

0 -1 1 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 -1 0 1 0

我已经为两个数组分配了内存,这是我尝试过的部分代码但它不起作用,它复制了整个数组

void copy_row(int **a, int **b, int m){
for(int i=0; i<m; i++){
b[i]=a[i];

}
}
int main(){
...
for(int i=0 ; i<n ; i++){
for(int j=0 ; j<m ; j++){
for(int k=j+1; k<m ; k++){

if (a[i][j]==-1 && a[i][k]==1){
copy_row(a,b,n);
}

}
}
}

如果要复制一行,则需要将当前行的索引加上列数传递给copy_row

来自main的调用可以是

// Notice that we pass index i and not n
copy_row(m, a, b, i);

copy_row可以是:

void copy_row(int numOfColumns, int a[][numOfColumns], int b[][numOfColumns], int rowIndex) {
for (int ii = 0, ii < numOfColumns, ++ii) {
b[rowIndex][ii] = a[rowIndex][ii];
}
}

可以在if语句中调用copy_row后添加break。一旦复制了一行,就不需要继续检查其他列的-1。例如,您可以使用

来减少检查次数。
for(int j = 0 ; j < m ; ++j) {
if (a[i][j] == -1) {
for(int k = j + 1; k < m ; ++k) {
if (a[i][k] == 1) {
copy_row(m, a, b, i);
break;
}
}
break;
}
}

最新更新