2009-05-10 11 views
3

나는 C#에서 마이크로 컨트롤러에 불에 타지 않도록 C 코드를 변환하려고하고있다.C에서 다차원 문자 배열을 초기화하는 방법?

누군가가 C에서 2 차원 문자열 배열을 C#으로 변환하는 방법을 알려주시겠습니까?

내 C# 코드는 다음과 같습니다

string[,] DirectionPosition = {{"00", "10", "", "01", ""}, 
             {"01", "11", "", "02", "00"}, 
             {"02", "12", "", "03", "01"}, 
             {"03", "13", "", "04", "02"}, 
             {"04", "14", "", "", "03"}, 
             {"10", "20", "00", "11", ""}, 
             {"11", "21", "01", "12", "10"}, 
             {"12", "22", "02", "13", "11"}, 
             . 
             . 
             . 
             . 
             {"44", "", "34", "", "43"},}; 

그리고 또한, 어떻게 내가 요소에 액세스 것인가? C#에서 세 번째 행의 두 번째 요소를 원한다면 DirectionPosition [2,1]이 될 것입니다. C에 문자열이 없으면 2 차원 문자열 배열이 훨씬 적습니다.

답변

7
char DirectionPosition[][ 5 ][ 3 ] = {{"00", "10", "", "01", ""}, 
            {"01", "11", "", "02", "00"}, 
            {"02", "12", "", "03", "01"}, 
            {"03", "13", "", "04", "02"}, 
            {"04", "14", "", "", "03"}, 
            {"10", "20", "00", "11", ""}, 
            {"11", "21", "01", "12", "10"}, 
            {"12", "22", "02", "13", "11"}, 
            . 
            . 
            . 
            . 
            {"44", "", "34", "", "43"},}; 

C에는 inbuilt 문자열 클래스가 없으므로 문자 배열을 사용해야합니다. 또는 char 포인터에 대한 포인터를 사용할 수도 있습니다.

10

가장 쉬운 방법은 다음대로 숯 포인터이다 할 :

DirectionPosition[0][1] (제로 기반으로 첫 번째 행의 요소 "10"를 참조
char *DirectionPosition[9][5] = { 
    {"00", "10", "", "01", "" }, 
    {"01", "11", "", "02", "00"}, 
    {"02", "12", "", "03", "01"}, 
    {"03", "13", "", "04", "02"}, 
    {"04", "14", "", "", "03"}, 
    {"10", "20", "00", "11", "" }, 
    {"11", "21", "01", "12", "10"}, 
    {"12", "22", "02", "13", "11"}, 
    {"44", "", "34", "", "43"} 
}; 

먼저 인덱스 선이고, 두 번째 열인).

+0

주 당신이 당신이 코드에서 이러한 문자열을 수정할 수 없습니다 정적 문자열에 대한 포인터를 저장하는 것입니다. 그것들을 수정하고 싶다면 dirkgently 코드처럼 배열의 초기화 자로 사용하십시오. – rampion

+0

나는 실제로 그 점을 @rampion이라고 생각했지만 마이크로 컨트롤러 측면과 질문에서의 음색을 고려할 때 명령을 상수 테이블로 간주하도록 결정했습니다. 어떤 경우에는 3d가 아닌 포인터 유형 솔루션을 사용해야합니다. – paxdiablo

+0

나는 char * DirectionPosition [5] = {.....}를 선호한다. – chmike

2

내가 예를 들어, 문자열 및 행 당 문자열의 최대 수의 최대 길이를 결정하고 컴파일러를 말하는 것이 좋습니다 : 이제

typedef char string[3]; 
typedef string s5[5]; 

    s5 DirectionPosition[] = {{"00", "10", "", "01", ""}, {"01", "11", "", "02", "00"}, {"02", "12", "", "03", "01"}, {"03", "13", "", "04", "02"}, {"04", "14", "", "", "03"}, {"10", "20", "00", "11", ""}, {"11", "21", "01", "12", "10"}, {"12", "22", "02", "13", "11"}, {"44", "", "34", "", "43"},}; 

, DirectionPosition [2] [1] & C는 특정 문자열에 액세스 할 수 있도록합니다 행렬에

1

는 모든 여분의 브라켓없이이 일을 조금 더 간단한 방법이있다 :

#include <stdio.h> 

int main(int argc, char **argv) { 

char DirectionPosition[][ 5 ][ 3 ] = {"00", "10", "", "01", "", 
            "01", "11", "", "02", "00", 
            "02", "12", "", "03", "01", 
            "03", "13", "", "04", "02", 
            "04", "14", "", "", "03", 
            "10", "20", "00", "11", "", 
            "11", "21", "01", "12", "10", 
            "12", "22", "02", "13", "11", 
            "44", "", "34", "", "43"}; 

    printf("dp[1][1] == %s\n", DirectionPosition[1][1]); 
    printf("dp[1][2] == %s\n", DirectionPosition[1][2]); 
    printf("dp[1][3] == %s\n", DirectionPosition[1][3]); 

    return; 
} 
+0

Yeesh. 나는 가독성을 위해 여분의 괄호를 선호한다. 컴파일러는 어떤 항목이 어디로가는 지 쉽게 알아낼 수 있지만 다음과 같이하고 싶습니다. :) – rampion

관련 문제