我有一个由索引和值组成的无限数量的“情侣”的字符数组,用分号分隔。每个索引都用逗号分隔。
示例:
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}};
如何?
答案 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;
}