Как я могу записать строку в двумерный массив в C? - PullRequest
1 голос
/ 15 февраля 2011

Могу ли я узнать, как записать строку символов в массив символов 2D? Мне нужно прочитать каждый символ в строке и поместить его в 2D-массив.

Например:

символьная строка [10];

Я хочу записать все символы в строке в двумерный массив.

Это означает, что когда я читаю массив [0] [0], я должен получить первый символ.

Обновление:

предположим, что моя строка "GOODMORN" тогда 2D-массив должен выглядеть следующим образом ..

  0|1|2|3
0 G|O|O|D
1 M|O|R|N

Ответы [ 3 ]

2 голосов
/ 15 февраля 2011

Во-первых, убедитесь, что array[0] достаточно большой, чтобы вместить вашу строку.Во-вторых, используйте memcpy или strncpy, чтобы скопировать байты string в array[0].

Если вам нужно обработать и адресовать каждый символ индивидуально, вы можете начать с того, что делает memcpy, нов цикле:

#define NUM_ARRAYS 2
#define LENGTH 4

char *string = "GOODMORN";

for (arr = 0; arr < NUM_ARRAYS; arr++)
{
    for (idx = 0; idx < LENGTH; idx++)
    {
        array[arr][idx] = string[idx + (arr * LENGTH)];
    }
}
0 голосов
/ 15 февраля 2011

Пример программы, которую я только что написал, чтобы вы могли поиграть и посмотреть, хотите ли вы этого.Важной частью является то, что в игру входят циклы, разделяющие строки на персонажа.

Существует множество улучшений (strncpy, входная переменная динамическая, MEMORY FREES и т. Д.), Ноэто до вас.

Редактировать: Модификация strncpy была только что отправлена ​​резиновыми сапогами.

int main()
{
    char A[12] = "Hello World", **B;
    int B_LEN = strlen(A) / 2 + 1;

    B = (char**)malloc(2 * sizeof(char*));
    B[0] = (char*)malloc(B_LEN * sizeof(char));
    B[1] = (char*)malloc(B_LEN * sizeof(char));

    int i, j;

    for (i = 0; i < 2; i++) {
        for (j = 0; j < B_LEN; j++) {
            B[i][j] = A[B_LEN * i + j];
        }
        B[i][j] = '\0';
    }

    printf("%s", B[0]);
    printf("[END]\n");
    printf("%s\n", B[1]);
    printf("[END]\n");

    return 0;
}

Obs .: Выходные данные должны быть как

Здравствуйте, [END]
World [END]

Метка для того, чтобы показать вам, есть ли пробелы, т. Е. Где именно произошло деление.

0 голосов
/ 15 февраля 2011

Отказ от ответственности: я не совсем понял, о чем идет речь; -)

Вы можете просто скопировать строку в место, на которое указывает константа массива для двумерного массива:

...

char array[2+1][4];
memcpy((void *)array, TEXT, sizeof(TEXT));

...

Но это не даст автоматически масштабируемых массивов. Может быть, вы думаете о следующем:

#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>

 char **matrixify(char text[], int vert, int horiz)
{
 int i=0;
 char **m = (char **)calloc(vert, sizeof(char*));
 do  m[i] = text + i * horiz; while(i++ < vert); 
 return m;
}

 int main()
{
 int x, y;
 /* char t[] = "this is a really long text with many words and stuff"; */
 char t[] = "GOODMORN";
 int edge = 1+(int)sqrt((double)strlen(t)); /* make a square from text */
 /* int vert = edge, horiz = edge; */ /* Auto size detection */
 int vert = 2, horiz = 4;

 char *textbuf = (char *)calloc(vert, horiz); /* not always 0-terminated */
 char **matrix = matrixify(strncpy(textbuf, t, vert*horiz), vert, horiz);

 for(y=0; y<vert; y++) {
   for(x=0; x<horiz; x++) printf("%c ", matrix[y][x]);
   printf("\n");
 }
 /*  prints:
   G O O D
   M O R N
   through matrix[i][j]   */
 return 0;
}

, что приводит к разметке вашей памяти, но выглядит сложным для проблемного состояния, , но это C ...

С уважением

БВУ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...