【问题标题】:convert char array into int 2d array in C language用C语言将char数组转换为int 2d数组
【发布时间】:2017-10-23 21:14:16
【问题描述】:

我有一个由索引和值组成的不定数量“对”的字符数组,用分号分隔。每个索引与其值之间用逗号分隔。

例子:

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

怎么样?

【问题讨论】:

  • 你需要解析这个字符串。这里不容易。
  • 您的代码中存在溢出。让它str[21]
  • 使用strtok_rstrtokstrchr。然后使用strtol
  • strtoksscanf(str, "%d,%d")...

标签: c arrays multidimensional-array


【解决方案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;
}

【讨论】:

  • 真正的二维数组int pairs[pairsCount][2];! (我会使用size_t pairsCount = 1;"%d ,%d" 中的一个空格,但这些都是次要的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 2020-02-27
  • 2014-03-02
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多