C:如何在2d char数组的每个空格中放置一个String?

时间:2015-04-08 06:36:36

标签: c arrays string sudoku

我在C编程一个数独求解器。结构是我有2d char数组。

第一个是实体数独所有空(0)&完整的点从txt保存。文件,它也是我最后的输出。

第二个也是2d char数组,其中包含第一个数组中空白空间的所有可能值(第一个数组中为0)。在开始时,我必须使用所有可能的值初始化第二个2d char数组" 123456789"并且一个接一个地交叉,直到只剩下一个可能的值,并且那个值保存在第一个数组中。

不,我的问题。我怎样才能像#34; 123456789"在2d char数组中。

我尝试了以下事项:

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网格,其中包含&#39; 9&#39;在每个空格中,因为它只在数组中放入一个字符,但是如何将整个字符串放在数组中呢? / p>

修改 我有解决方案,感谢所有的帮助!!

3 个答案:

答案 0 :(得分:1)

要在2d-array使用的每个元素中存储字符串的地址:

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]都是独立数据,您可以从每个单元格的可能值中排除元素。

答案 1 :(得分:1)

使用一个字符代替分配字符串。

char initters[] = "123456789";

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

这是一个二维的字符数组。 从某种意义上说,数组的每个元素都是char。

答案 2 :(得分:1)

possible_valuesset个数值,表示为字符串。所以这个:

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");
}