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

标签 c arrays string parsing

我有一个字符串,它的形式是 “1 2 8 4 9 0”等。我知道它会遵循整数、空格、整数...的格式。

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

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

A[0] = 1

A[1] = 2

A[2] = 3

谢谢!

最佳答案

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,并且不能很好地处理以空格结尾的输入。

关于c - 可变长度的字符串到int数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7840842/

相关文章:

c++ - 是否为地址从未使用过的静态常量变量分配了内存?

c# - 检查一组不断变化的字符串是否包含字符串的最快方法

php - 从Mysql数据为Flot创建数组

c++ - 为什么这些创建字符串的方法之间有如此大的差异

c++ - 如何链接我自己的 .so 文件而不是操作系统包 .so 文件?

c - 当标准输入设置为 C 中的文件时如何从键盘读取

c++ - 定义未定义的行为

c - 有没有一种简洁的方法(没有循环)在 C 中创建线性间隔的数组?

c# - 在字符串中实现重复字符删除的最快方法 (C#)

javascript - 从字符串数组生成星期几对象