Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从字符串中提取数量不确定的整数_C_String_Substring_Scanf - Fatal编程技术网

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

C 从字符串中提取数量不确定的整数,c,string,substring,scanf,C,String,Substring,Scanf,我想知道是否有更好的方法;假设我们使用fgets()将stdin读入一个字符串,其中该字符串总共包含n整数(例如5 16 2 34对于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 对于(i=0,j=0;i我想说你最好使用一个库来做这件事

我想知道是否有更好的方法;假设我们使用
fgets()
将stdin读入一个字符串,其中该字符串总共包含
n
整数(例如
5 16 2 34
对于
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

对于(i=0,j=0;i我想说你最好使用一个库来做这件事,因为数量未知

你可以使用strtok和strtol

首先使用标记化字符串,然后使用sscanf怎么样?

你可以使用
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;
  }

这也适用于格式错误的输入,如“5164诸如此类”。您的解决方案可能不是地球上最漂亮的东西,但是,嘿,它是有效的。只需适当地评论它,然后继续做其他事情。您应该添加用法示例和文档链接。谢谢。只是好奇,为什么现在有反馈?我两年前写了这个!