我想知道是否有更好的方法来做到这一点;假设我们使用fgets()
将字符串读取到字符串,其中字符串包含总共n
个整数(例如5 16 2 34
的{{1}}),提取它们的最佳方法是什么?必须有比这个黑客更好的方法:
n = 4
我知道只使用for (i=0, j=0; i<n; ++i, j+=pos)
sscanf(string+j, "%d%n", &array[i], &pos); // Using %n makes me feel dirty
这样的内容是可能的(并且看似更容易)但我宁愿避免使用for (i=0;i<n;++i) scanf("%d", array+i);
,原因显而易见。¹
答案 0 :(得分:2)
您可以使用strtol
。以下代码从字符串中准确读取n
个整数:
while (n)
{
int long v = strtol (s, &e, 10);
if (v == 0 && strlen (e) > 0)
{
++e;
if (!e)
break;
}
else
{
printf ("%d\n", v);
--n;
}
s = e;
}
这也适用于像“5 16 4 blah blah 32”这样的错误输入。
答案 1 :(得分:0)
我会说你可能最好使用regex库来做这件事,因为数量未知
答案 2 :(得分:0)
你可以使用strtok和strtol
答案 3 :(得分:0)
首先使用strtok来标记字符串,然后使用sscanf呢?