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

标签 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

我知道简单地使用类似 for (i=0;i<n;++i) scanf("%d", array+i); 的东西是可能的(并且看起来更容易)但我宁愿避免使用 scanf()出于显而易见的原因。 ¹

最佳答案

您可以使用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”。

关于c - 从字符串中提取不确定数量的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3819678/

相关文章:

c - 为什么 MIDI 音序器在 Windows 10 上无法第二次播放

c - 由于文件格式问题程序崩溃

javascript - 将数组分配为映射中的对象值

c++ - 检测 C++ 字符流中的字符

mysql - mysql中的自然排序技术

string - SQLite3 中子字符串的索引?

php - 如何使用php将mysql列的子字符串插入循环内的空列中?

我们可以在代码块中不创建项目的情况下进行调试吗

创建新信号或复用 SIGALRM?

char *cQuery 追加字符串