2009-05-10 25 views
3

Ich versuche, etwas Code von C# zu C zu konvertieren, damit es auf einen Mikrocontroller gebrannt werden kann.Wie initialisiert man ein mehrdimensionales Char-Array in C?

Könnte mir bitte jemand sagen, wie ich ein zweidimensionales String-Array in C# in etwas in C konvertieren würde?

Mein C# Code sieht wie folgt aus:

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

Und außerdem, wie würde ich die Elemente zugreifen? In C#, wenn ich das zweite Element in der dritten Zeile wollte, wäre es einfach DirectionPosition [2,1], aber was ist das Äquivalent, wenn es keine Zeichenfolge in C gibt viel weniger 2-D-String-Arrays?

Antwort

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 hat keine eingebaute String-Klasse, Sie müssen mit Zeichen-Arrays auskommen. Sie könnten alternativ Zeiger auf den Zeiger auf char verwenden.

10

Der einfachste Weg, mit char Zeigern zu tun, ist es wie folgt:

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

Das Element „10“ in der ersten Zeile Bezug genommen wird als DirectionPosition[0][1] (Null-basierte, erster Index ist Zeile, zweite Spalte).

+0

Beachten Sie, dass da Sie Zeiger auf statische Strings sind zu speichern, die Sie nicht in der Lage sein, diese Strings im Code zu ändern. Wenn Sie sie ändern möchten, verwenden Sie sie als Initialisierer für Arrays wie im Code von dirkently. – rampion

+0

Ich habe tatsächlich daran gedacht, @ rampion, aber angesichts der Mikrocontroller-Aspekt und der Ton in der Frage, habe ich die Befehlsentscheidung getroffen, es als eine konstante Tabelle zu behandeln. Ich habe mich möglicherweise geirrt. In diesem Fall sollten Sie eine der 3D-Lösungen ohne Zeigertyp verwenden. – paxdiablo

+0

Ich würde bevorzugen char * DirectionPosition [] [5] = {.....}; – chmike

2

Ich empfehle die maximale Länge der Saiten und die maximale Anzahl von Strings pro Zeile zu entscheiden und den Compiler zu sagen, zum Beispiel:

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

Nun DirectionPosition [2] [1] & c lassen Sie bestimmte Strings zugreifen in der Matrix.

1

Es gibt eine etwas einfachere Art und Weise, dies zu tun, ohne all die zusätzlichen Klammern:

#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. Ich bevorzuge die zusätzlichen Klammern für die Lesbarkeit. Der Compiler kann leicht herausfinden, welcher Eintrag wohin geht, aber ich würde es auch gerne tun :) – rampion

Verwandte Themen