用C语言将char数组转换为int 2d数组

时间:2017-10-23 21:14:17

标签: c arrays multidimensional-array

我有一个由索引和值组成的无限数量的“情侣”的字符数组,用分号分隔。每个索引都用逗号分隔。

示例:

char srt[50] = "1,3; 2,4; 0,-2; 3,11";   

(“index1,value1; index2,value2; ...”)

我想将char数组转换为2d int数组,如下所示:

int num[4][2] = {{1,3}, {2,4}, {0,-2}, {3,11}};

如何?

1 个答案:

答案 0 :(得分:1)

希望不要因为做功课而投票,但我只是花了一些时间来编写代码。 方法是首先计算(可能的)对的数量(分号的数量+ 1),以便保留适当的数组。 然后,使用带有strtok的循环来分隔对,并使用sscanf(str, "%d,%d",..)来读取值。请注意,由于解析对时失败,实际对的数量可能与最大对数不同:

int main()
{
    char srt[50] = "1,3; 2,4; 0,-2; 3,11";

    char* p=srt;
    size_t pairsCount = 1;
    while (*p) {
        if (*p++ == ';')
            pairsCount++;
    }

    int pairs[pairsCount][2];

    p = strtok(srt, ";");
    pairsCount = 0;
    while (p) {
        int key = 0, value = 0;
        if (sscanf(p, "%d,%d", &key, &value) == 2) {
            pairs[pairsCount][0] = key;
            pairs[pairsCount][1] = value;
            pairsCount++;
        }
        p = strtok(NULL, ";");
    }

    for (int i=0; i<pairsCount; i++) {
        printf("%d,%d\n", pairs[i][0], pairs[i][1]);
    }

    return 0;
}