C:如何在二维字符数组的每个空间中放置一个字符串?
C: How to put a String in every Spaces of a 2d char Array?
我正在用 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 '[=12=]'
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]
都是独立的数据,您可以从每个单元格的可能值中排除元素。
使用一个字符而不是一串字符来赋值。
char initters[] = "123456789";
for(j=0;j<9;j++){
for(k=0;k<9;k++){
possible_values[j][k] = innitters[k];
}
}
这是一个二维字符数组。
数组的每个元素都是一个字符在某种程度上是有道理的。
possible_values
是一个set的数值,用字符串表示。所以这个:
char *possible_values[9][9];
char initial_values [] = "123456789";
很好。
您只需要使用正确的语法来访问和打印字符串。
for(j=0;j<9;j++){
for(k=0;k<9;k++){
//no need for &, as initial_values and possible_values are both strings
possible_values[j][k] = initial_values;
}
}
for(j=0;j<9;j++){
for(k=0;k<9;k++){
//printf with %s to print a string, no need for *
printf("The possible values of cell [%d][%d] are [%s]\n",
j, k,
possible_values[j][k]);
}
printf("\n");
}
我正在用 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 '[=12=]'
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]
都是独立的数据,您可以从每个单元格的可能值中排除元素。
使用一个字符而不是一串字符来赋值。
char initters[] = "123456789";
for(j=0;j<9;j++){
for(k=0;k<9;k++){
possible_values[j][k] = innitters[k];
}
}
这是一个二维字符数组。 数组的每个元素都是一个字符在某种程度上是有道理的。
possible_values
是一个set的数值,用字符串表示。所以这个:
char *possible_values[9][9];
char initial_values [] = "123456789";
很好。
您只需要使用正确的语法来访问和打印字符串。
for(j=0;j<9;j++){
for(k=0;k<9;k++){
//no need for &, as initial_values and possible_values are both strings
possible_values[j][k] = initial_values;
}
}
for(j=0;j<9;j++){
for(k=0;k<9;k++){
//printf with %s to print a string, no need for *
printf("The possible values of cell [%d][%d] are [%s]\n",
j, k,
possible_values[j][k]);
}
printf("\n");
}