可变长度到int数组的字符串?

时间:2011-10-20 19:00:39

标签: c arrays string parsing

我有一个表格中的字符串 “1 2 8 4 9 0”等我知道它将遵循整数,空格,整数格式......

然而,我无法保证长度。我知道最大长度,如果有帮助的话。 我想使用sscanf,但它需要有限数量的整数。

任何想法如何将“1 2 3”变成数组

A [0] = 1

A [1] = 2

A [2] = 3

谢谢!

4 个答案:

答案 0 :(得分:2)

strtol表示字符串失败的位置 对于像"1 2 3 ..."这样的字符串,它会读取1并在之后失败;如果您随后将该失败点(" 2 3 ...")传递给strtol,它将会显示2并在之后失败,......,...

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  char input[] = "6 82 -7453 4 0 63 ";
  char *err = " ", *curr = input;
  int x, k = 0;
  while (*curr && isspace((unsigned char)*err)) {
    x = strtol(curr, &err, 10);
    printf("#%d: %d\n", k++, x);
    curr = err + !!*err; // do not advance past the '\0'
  }
  return 0;
}

See it in action - 与上面的代码段不同,ideone中的代码用1:/初始化k,并且不能很好地处理以空格结尾的输入。< / p>

答案 1 :(得分:1)

使用

rc = sscanf(string, "%d%n", &array[i], &len);

在一个循环中。测试rc,并使用len跳到下一个项目。

答案 2 :(得分:0)

这真的不那么复杂:

  1. 使用strlen
  2. 计算字符串的长度
  3. 使用malloc
  4. 为阵列分配足够的内存
  5. 再次迭代字符串并填充数组
  6. <强> See it in action

答案 3 :(得分:0)

许多方法之一可能是使用strtok来将字符串标记为分隔符为空格&amp;每个strtok调用的返回值可以与sscanf一起用于单个整数。如您所知,最大长度可以迭代数组以与these lines上的sscanf内容一起使用。
希望这有帮助!