Извлечь неопределенное количество целых чисел из строки - PullRequest
3 голосов
/ 29 сентября 2010

Мне было интересно, есть ли лучший способ сделать это; скажем, мы читаем stdin в строку, используя fgets(), где строка включает в себя всего 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() по понятным причинам. ¹

Ответы [ 4 ]

2 голосов
/ 29 сентября 2010

Вы можете использовать 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 бла-бла 32".

0 голосов
/ 29 сентября 2010

Вы можете использовать strtok и strtol

0 голосов
/ 29 сентября 2010

Как насчет того, чтобы сначала использовать strtok для токенизации строки, а затем использовать sscanf?

0 голосов
/ 29 сентября 2010

Я бы сказал, что для этого лучше использовать библиотеку regex , поскольку количество неизвестно

...