簡體   English   中英

C:如何在2d char數組的每個空間中放置一個字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM