我有一个字符串(char),我想从中提取数字。
所以我有字符串:1 2 3 4 /0
现在我想要一些变量,所以我可以将它们用作整数:a=1, a=2, a=3, a=4
我该怎么做?
答案 0 :(得分:4)
到目前为止给出的答案是正确的,只要您的字符串按照您期望的方式格式化即可。你应该总是检查sscanf的返回值,以确保一切正常。 sscanf返回成功执行的转换次数,在上述情况4中。
if (4 != sscanf(buf, "%d %d %d %d", &a, &b, &c, &d))
{
/* deal with error */
}
如果buf是“1 2 3”或“1 2 a b”或其他东西,sscanf将返回短项目数。
答案 1 :(得分:3)
正如其他人所说,如果您知道预期的数量,sscanf是最简单的解决方案。否则,下面草拟了一个更通用的解决方案:
首先用空格标记字符串。标准的C方法是strtok():
char* copy;
char* token;
copy = strdup(string); /* strtok modifies the string, so we need a copy */
token = strtok(copy, " ");
while(token!=NULL){
/* token now points to one number.
token = strtok(copy, " ");
}
然后将字符串转换为整数。 atoi()会这样做。
答案 2 :(得分:2)
sscanf()可以做到这一点。
#include <stdio.h>
int main(void)
{
int a, b, c, d;
sscanf("1 2 3 4", "%d %d %d %d", &a, &b, &c, &d);
printf("%d,%d,%d,%d\n", a, b, c, d);
}
答案 3 :(得分:2)
如果字符串总是包含4个用空格分隔的数字,那么可以用sscanf完成:
sscanf(string, "%d %d %d %d", &a, &b, &c, &d);
如果数字的数量不同,那么你需要解析字符串。
请相应澄清您的问题。