【发布时间】:2011-10-20 19:00:39
【问题描述】:
我有一个字符串,格式为 “1 2 8 4 9 0”等。我知道它会遵循整数、空格、整数的格式...
但是,我不能保证长度。我知道最大长度,如果有帮助的话。 我想使用 sscanf,但它需要有限数量的整数。
关于如何将“1 2 3”转换为数组的任何想法
A[0] = 1
A[1] = 2
A[2] = 3
谢谢!
【问题讨论】:
我有一个字符串,格式为 “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 -- 与上面的 sn-p 不同,ideone 使用 1 :/ 初始化 k 并且不能很好地处理以空格结尾的输入。
【讨论】:
使用
rc = sscanf(string, "%d%n", &array[i], &len);
在一个循环中。测试 rc,然后使用 len 跳到下一项。
【讨论】:
【讨论】:
其中一种方法是使用strtok 将字符串标记为空格,每个strtok 调用的返回值可以与sscanf 一起用于单个整数。如您所知,您可以迭代数组以与sscanf 一起使用these lines 上的某些内容。
希望这会有所帮助!
【讨论】: