C:如何在二维字符数组的每个空间中放置一个字符串?

标签 c arrays string sudoku

我正在用 C 编写数独求解器。结构是我有 2d 字符数组。

第一个是实际的数独游戏,所有空(0)和满点都从 txt 中保存。文件,也是我最后的输出。

第二个也是 2d char 数组,其中包含第一个数组中空白区域的所有可能值(第一个数组中为 0)。一开始,我必须用所有可能的值“123456789”初始化第二个二维字符数组,然后一个接一个地划掉,直到只剩下一个可能的值,并将该值保存在第一个数组中。

没有我的问题。如何将“123456789”之类的字符串放入二维字符数组中。

我尝试了以下操作:

int j, k;
char possible_values[9][9];

for(j=0;j<9;j++){
    for(k=0;k<9;k++){
        possible_values[j][k] = "123456789";
    }
}     


for(j=0;j<9;j++){
    for(k=0;k<9;k++){
        printf("%c", possible_values[j][k]);
    }
    printf("\n");
} 

int j, k;
char *possible_values[9][9];
char string [] = "123456789";

for(j=0;j<9;j++){
    for(k=0;k<9;k++){
        possible_values[j][k] = &string;
    }
}     


for(j=0;j<9;j++){
    for(k=0;k<9;k++){
        printf("%c", *possible_values[j][k]);
    }
    printf("\n");
} 

但它打印的 aut 是一个 9x9 网格,每个空格都有“9”,因为它只将一个字符放入数组中,但我如何将整个字符串放入数组中?

编辑 我有解决方案,感谢所有帮助!!

最佳答案

要在二维数组的每个元素中存储字符串的地址,请使用:

for(j=0;j<9;j++){
    for(k=0;k<9;k++){
        possible_values[j][k] = string; // & not needed
    }
}

注意: possible_values 中的所有指针都指向相同的内存(它们不是字符串的副本),所以如果 possible_values[1][2] 已更改,所有其他 possible_values[j][k] 也已更改)。

要输出字符串(所有字符串都相同 - 参见上面的注释)使用循环:

char *possible_values[9][9];

for(j=0;j<9;j++){
    for(k=0;k<9;k++){
         printf("%s", possible_values[j][k]);
    }

%s表示字符串,%c表示单个字符。

编辑:

我想你需要这样的东西:

#include <stdio.h>
#include <string.h>

int main() 
{
    int j, k;
    char possible_values[9][9][10]; // 10th element in 3rd dimension is for '\0' 
    char string [] = "123456789";

    for(j=0;j<9;j++)
    {
        for(k=0;k<9;k++)
        {
            memcpy(possible_values[j][k], string, 10);
        }
    } 

    for(j=0;j<9;j++){
        for(k=0;k<9;k++){
            printf("%s ", possible_values[j][k]);
        }
    }
    return 0;
}

现在任何 possible_values[j][k] 都是独立的数据,您可以从每个单元格的可能值中排除元素。

关于C:如何在二维字符数组的每个空间中放置一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29507591/

相关文章:

c - 调试器如何从代码行中查找表达式

c - 在C链表中添加节点并列出它们

java - 生成具有指定字符的随机字符串?

php - "Unsanitizing"数组中的元素

c - 在 C 中的循环内分配和释放内存

python - 如何从命令行 python 获取列表作为输入?

c++ - 二进制 + 的无效操作数

c - 为什么 `ioctl(fd, EVIOCGRAB, 1)` 有时会导致 key 垃圾邮件?

java - 在java中的项目数组中查找最昂贵的项目

c - 警告 : passing argument 2 of 'transform_labels' from incompatible pointer type [-Wincompatible-pointer-types]|