从字符串中提取未确定数量的整数

时间:2010-09-29 07:47:01

标签: c string substring scanf

我想知道是否有更好的方法来做到这一点;假设我们使用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);,原因显而易见。¹

4 个答案:

答案 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呢?