如何在C中将字符串写入二维数组?

时间:2011-02-15 18:43:13

标签: c

我可以知道如何将字符串写入2D字符数组吗? 我需要读取字符串中的每个字符并将其放入2D数组中。

例如:

char string [10];

我想将字符串中的所有字符写入2D数组。

这意味着,当我读取数组[0] [0]时,我应该得到第一个字符。

更新

假设我的字符串是“GOODMORN” 那么2D数组应该是这样的..

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

3 个答案:

答案 0 :(得分:2)

首先,确保array[0]足以容纳你的字符串。其次,使用memcpystrncpystring的字节复制到array[0]

如果你需要单独处理和处理每个字符,你可以从做memcpy的操作开始,但是在for循环中:

#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)];
    }
}

答案 1 :(得分:0)

免责声明:我真的不明白这个问题是什么; - )

你可以简单地将字符串复制到指向的位置 2D数组的数组常量:

...

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 ......

问候

RBO

答案 2 :(得分:0)

我刚刚写的一个示例程序供您玩,看看这是否是您想要的。 重要的部分是循环进入游戏的位置,按字符划分字符串。

可以做很多改进(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。:输出必须像

  

你好[结束]
  世界[结束]

标签是为了告诉你是否有空格,即确切地发生了分裂。