![](/img/trans.png)
[英]How to get the strings from a file and store in a 2D char array and compare that 2D char array with a string in C?
[英]C: How to put a String in every Spaces of a 2d char Array?
我正在用C编写数独求解器。构造函数是我有2d char Arrays。
第一个是实际的数独,所有空(0)和完整点都从txt中保存。 文件,这也是我最后的输出。
第二个也是2d char Array,第一个Array(第一个Array中的0)具有所有可能的值。 首先,我必须使用所有可能的值“ 123456789”来初始化第二个2d char数组,然后一个又一个地划掉,直到只剩下一个可能的值,并将该值保存在第一个Array中。
我没问题 如何在2d char数组中放入“ 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");
}
但它只能打印出一个在每个空格中带有9的9x9网格,因为它仅将一个char放入数组中,但是如何将整个String放入Array中?
编辑我有解决方案,感谢所有帮助!
要在2D数组的每个元素中存储字符串的地址,请使用:
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]
是独立的数据,您可以从每个单元格的可能值中排除元素。
分配时使用一个字符而不是字符串。
char initters[] = "123456789";
for(j=0;j<9;j++){
for(k=0;k<9;k++){
possible_values[j][k] = innitters[k];
}
}
它是字符的二维数组。 从某种意义上说,数组的每个元素都是一个char。
possible_values
是一组数字值,以字符串表示。 所以这:
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");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.