Как инициализировать многомерный массив символов в C? - PullRequest
3 голосов
/ 10 мая 2009

Я пытаюсь преобразовать некоторый код из C # в C, чтобы его можно было записать на микроконтроллер.

Может кто-нибудь сказать мне, как бы я преобразовал двумерный массив строк в C # во что-то в 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 нет строки, а тем более двухмерных массивов строк?

Ответы [ 4 ]

10 голосов
/ 10 мая 2009

Самый простой способ сделать это с помощью указателей на символы следующим образом:

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

Элемент "10" в первой строке обозначен как DirectionPosition[0][1] (начиная с нуля, первый индекс - строка, второй - столбец).

7 голосов
/ 10 мая 2009
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 не имеет встроенного класса строк, вы должны обходиться с массивами символов. В качестве альтернативы вы можете использовать указатели для указания на символ.

2 голосов
/ 10 мая 2009

Я рекомендую выбрать максимальную длину строк и максимальное количество строк в строке и сообщить об этом компилятору, например ::

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 голос
/ 10 мая 2009

Существует несколько более простой способ сделать это без дополнительных скобок:

#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...