我有一个由索引和值组成的无限数量的“情侣”的字符数组,由分号分隔 . 每个索引都用逗号分隔 .
例:
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的数量),以便保留适当的数组 . 然后,使用带有 strtok 的循环来分隔对,使用 sscanf(str, "%d,%d",..) 来读取值 . 请注意,由于解析对时失败,实际对的数量可能与最大对数不同:
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; }
1 回答
希望不要因为做功课而投降,但我只是花了一些时间来编写代码 . 方法是首先计算(可能的)对的数量(分号1的数量),以便保留适当的数组 . 然后,使用带有
strtok
的循环来分隔对,使用sscanf(str, "%d,%d",..)
来读取值 . 请注意,由于解析对时失败,实际对的数量可能与最大对数不同: