c++ - 排序函数删除数组的一部分,C

标签 c++ c arrays sorting

我遇到了这个非常奇怪的问题。稍后您将看到的函数应该确保二维数组中的所有元素(字符)都在最大位置,也就是说,任何字符上方都没有空格。例如,一个板可能看起来像这样:

1 X * * X ^
2   * X ^ *
3 o o * X ^
4 o ^ X X X
5 ^ * X * ^
  1 2 3 4 5

在 (2,1) 处有一个问题,因为在非空白空间上方有一个空白空间。

我的函数正确地进行了排序,但它删除了底行中上方有空格的所有字符。对于我的生活,我无法弄清楚为什么。这是我的排序函数。

int bb_float_one_step(BBoard board){
int i,j;
for (i = 0; i < board->rows; i++){
    for (j = 0; j < board->cols; j++){
        if (board->boardDim[i][j] == None && (board->boardDim[i + 1][j] != None && i + 1 <= board->rows)){
            char tmp = board->boardDim[i + 1][j];
            board->boardDim[i + 1][j] = board->boardDim[i][j];
            board->boardDim[i][j] = tmp;
            }   
        }
    }
    for (i = 0; i < board->rows; i++){
    for (j = 0; j < board->cols; j++){
    printf("%c",board->boardDim[i][j]);}printf("\n");}
}

下面是完整序列的图片,程序打印了一 block 板。要求用户选择要“弹出”的区域。然后一个函数替换所有与空格相连的字符。然后在图片的最后部分,您可以看到字符是如何被删除的。没有边框的板在那里,因为我用它来检查字符是否真的被删除了。 enter image description here 提前感谢您 1,阅读整篇文章,以及 2,您能提供的任何帮助。

最佳答案

由于您要将当前行与下一行进行比较,因此您应该使用 for(i = 0; i < board->rows-1; i++) 然后在你的复杂 if 语句中,去掉 && i <= board->rows .无论如何,这应该是小于,而不是小于或等于。您将越界并在数组中产生垃圾。

关于c++ - 排序函数删除数组的一部分,C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921691/

相关文章:

c++ - 将 short 分配给数组中的 unsigned char 的结果是什么?

python - 如何使用loadtxt在python中的同一个数组中加载多个文件?

c++ - 哪个更快 : if (bool) or if(int)?

c++ - 使用 ns2 以混杂模式监控数据包

c++ - sizeof(int) >= 2 和 sizeof(long) >= 4 : Is this always true for any implementation?

python - 在 Python 中将数据写入 UART 并从 C 中读取它们

c - Matlab 的单步 VC++ 2010 调试器

C++ 错误 : conversion to non-scalar type requested?

javascript - 如何分割子数组并生成唯一的组合

javascript - 如何使用 indexOf 在 JavaScript/jQuery 中搜索数组键