gpt4 book ai didi

c - 通过从中删除特定的行和列来缩小二维数组的大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:50 24 4
gpt4 key购买 nike

我正在学习 C,但找不到解决此问题的方法。

如果我有一个随机大小的矩阵,其中填充了“*”(星号)、“-”(水平条)、“|”(垂直条)、“+”(加号),并且我想删除每一行有一个“-”,每一列都有一个“|”,每一行和每一列都有一个“+”。

我如何减小矩阵的大小,以便在我打印剩余的“*”(星号)时,它们之间没有行和列被删除?

例如:

char mat[3][3] = {{'|', '*', '*'},
{'*', '*', '*'},
{'*', '*', '*'}};

输出将是:

**
**
**

另一个例子:

char mat[3][3] = {{'*', '*', '*'},
{'*', '+', '*'},
{'*', '*', '*'}};

输出将是:

**
**

更大的矩阵:

char mat[4][5] = {{'*', '|', '*', '|', '*'},
{'*', '*', '*', '*', '*'},
{'*', '+', '*', '-', '*'}
{'*', '*', '*', '*', '-'}};

输出将是:

***
***

提前致谢。

最佳答案

您不能像示例中那样收缩静态定义的数组。不过,您可以标记一列或一行,这样当打印阶段到来时,您只需跳过无效的列和行。

'|' 示例:

#include <stdio.h>

#define N 3
#define M 3

void invalidate_col(char mat[N][M], const int col)
{
for(int i = 0; i < N; ++i)
{
mat[i][col] = 'n';
}
}

void print(char mat[N][M])
{
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < M; ++j)
{
if(mat[i][j] != 'n')
printf("%c ", mat[i][j]);
}
printf("\n");
}
}

int main(void) {
char mat[N][M] = {{'|', '*', '*'},
{'*', '*', '*'},
{'*', '*', '*'}};
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < M; ++j)
{
if(mat[i][j] == '|')
{
invalidate_col(mat, j);
}
}
}
print(mat);
return 0;
}

输出:

* * 
* *
* *

如果你真的需要删除这些列和行,那么你需要动态分配矩阵(检查 my example ),使用 realloc() 相应地缩小它, 最后 free() 分配内存。

关于c - 通过从中删除特定的行和列来缩小二维数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47302781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com