C语言如何实现二维数组列间顶部字符移动的功能函数?
实现代码
void move_characters(const int rows, const int columns, char col[rows][columns], int x, int y) { // 列号非法或源列与目标列一致时直接返回 if (x < 0 || x >= columns || y < 0 || y >= columns || x == y) { return; } int src_row = -1; char move_ch = ' '; // 从源列顶部(行索引从小到大)查找第一个非空字符 for (int i = 0; i < rows; i++) { if (col[i][x] != ' ') { src_row = i; move_ch = col[i][x]; break; } } // 源列无可用字符直接返回 if (src_row == -1) { return; } // 移除源列对应位置的字符 col[src_row][x] = ' '; int dest_row = -1; // 从目标列底部(行索引从大到小)查找第一个空位 for (int i = rows - 1; i >= 0; i--) { if (col[i][y] == ' ') { dest_row = i; break; } } // 目标列已满无空位时直接返回 if (dest_row == -1) { return; } // 写入字符到目标列对应位置 col[dest_row][y] = move_ch; }
逻辑说明
- 前置校验避免数组越界访问,减少无效操作
- 源列查找逻辑符合"取顶部第一个字符"的要求,找到后立即清空对应位置
- 目标列从底部开始查找空位,保证字符优先落到最底部,已有字符时自动堆叠在现有字符顶部,完全匹配规则要求
- 兼容任意行列数的二维字符数组,无需修改代码适配数组大小
内容的提问来源于stack exchange,提问作者helperman200
相关产品推荐
相关产品推荐

