【发布时间】:2010-09-18 12:09:10
【问题描述】:
我有一个字符串 (char),我想从中提取数字。
所以我有字符串:1 2 3 4 /0
现在我想要一些变量,所以我可以将它们用作整数:a=1, a=2, a=3, a=4
我该怎么做?
【问题讨论】:
-
问题中的难点(作业?)是理解它...我建议尝试重新制定它。或许 atoi() 函数也能帮到你。
我有一个字符串 (char),我想从中提取数字。
所以我有字符串:1 2 3 4 /0
现在我想要一些变量,所以我可以将它们用作整数:a=1, a=2, a=3, a=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 将返回一个简短的项目计数。
【讨论】:
正如其他人所指出的,如果您知道预期有多少个数字,则 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() 会这样做。
【讨论】:
如果字符串总是包含 4 个用空格分隔的数字,那么可以使用 sscanf 来完成:
sscanf(string, "%d %d %d %d", &a, &b, &c, &d);
如果数字的数量不同,那么您需要解析字符串。
请相应地澄清您的问题。
【讨论】:
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);
}
【讨论】: