如何从 C 中的二维数组中删除一行?

Leo*_*nko 2 c arrays sorting 2d

如何从矩阵中删除特定行并保持相同的顺序?例子:

1 1 1
2 2 2
3 3 3
Run Code Online (Sandbox Code Playgroud)

假设我需要删除包含所有偶数元素的行,因此删除后它应该如下所示:

1 1 1
3 3 3
Run Code Online (Sandbox Code Playgroud)

我尝试自己编写代码(条件与我上面提到的不一样!)但它实际上无法正常工作:

for (i = 0 ; i < no_of_rows ; i++) { 
    if (abs(prosjeci[i] - prosjek) < 0.1) { /* condition */
        for (k = i ; k < no_of_rows - 1 ; k++) {
            for (j = 0 ; j < no_of_columns ; j++) {
                matrica[k][j] = matrica[k+1][j];
            }
        }
       i--;
       no_of_rows--;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*mit 5

我没有看到你的代码有什么问题。

在评论中,有人要求您发布一个“最小、完整且可验证的示例”。这就是这意味着什么。我充实了您的程序,添加了数组和其他变量的声明和初始化matrica,更改条件以匹配您的示例,并在最后打印出数组。我最终得到了这个:

#include <stdio.h>

int matrica[][3] = {
    {1, 1, 1},
    {2, 2, 2},
    {3, 3, 3}
};

int no_of_columns = 3;
int no_of_rows = 3;

int main()
{
    int i, j, k;

    for (i = 0 ; i < no_of_rows ; i++) { 
        if (matrica[i][0] % 2 == 0) { /* even row */
            for (k = i ; k < no_of_rows - 1 ; k++) {
                for (j = 0 ; j < no_of_columns ; j++) {
                    matrica[k][j] = matrica[k+1][j];
                }
            }
           i--;
           no_of_rows--;
        }
    }

    for (i = 0 ; i < no_of_rows ; i++) { 
        for (j = 0 ; j < no_of_columns ; j++) {
            printf("%d ", matrica[i][j]);
        }
        printf("\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您一开始就发布类似的内容,那就更好了。

但是当我编译并运行这个程序时,它运行得很好。(我并不感到惊讶——正如我所说,我不认为这有什么问题。)

所以无论你的问题是什么,问题都在于你没有向我们展示过。当您说“它实际上无法正常工作”时,您的意思是什么?您期望看到什么,而您看到了什么?

[PS:你的问题还有一个问题。在你问得更好之前,我什至不应该回答它。我的这个答案实际上被否决了,以提醒我这个事实。我没有抱怨; 我预料到了。但请下次提出更完整且可回答的问题。]