You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C语言将含81字符加终止符的一维数组转为9×9二维字符数组

实现方案

一维字符数组转9x9二维网格的核心逻辑是利用坐标映射:一维数组下标i对应二维网格的第i / 9行、第i % 9列,刚好覆盖全部81个有效字符。

1. 函数实现(两种可选写法)

写法1:全局二维数组版本

如果你的converted2d已经提前定义为全局9x9字符数组,直接用如下实现:

char converted2d[9][9]; // 全局二维网格定义

void convertArray(char lineHolder[])
{
    // 逐行逐列填充
    for(int row = 0; row < 9; row++){
        for(int col = 0; col < 9; col++){
            converted2d[row][col] = lineHolder[row * 9 + col];
        }
    }
}
写法2:传参版本(更规范,避免全局变量)

推荐用传参的方式传入二维数组,代码耦合度更低:

// 函数参数接受9x9的二维数组指针
void convertArray(char lineHolder[], char converted2d[9][9])
{
    // 单循环实现,逻辑更简洁
    for(int i = 0; i < 81; i++){
        converted2d[i/9][i%9] = lineHolder[i];
    }
}

2. 修复原有drag函数的边界问题

原有代码没有做输入长度限制,容易出现数组越界,修改后如下:

int drag(){
    char lineHolder[82];
    int puzzle = SOLVABLE;
    int last, i;
    last = i = 0;

    // 加长度判断,最多读81个有效字符
    while ((last = getchar()) != EOF && i < 81)
    {
        putchar(last);
        lineHolder[i] = last;
        i++;
    }
    lineHolder[i] = '\0'; // 手动补空终止符

    // 调用转换函数
    convertArray(lineHolder); // 全局版本用这行
    // 传参版本用这行:convertArray(lineHolder, converted2d);
    return 0;
}

如果你的网格后续需要按字符串处理,记得在每行末尾预留位置添加空终止符,单纯存字符网格不需要额外操作。

内容的提问来源于stack exchange,提问作者PillCosby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:24:03