将一串数字转换为整数

时间:2008-10-22 09:12:21

标签: c string

我有一个字符串(char),我想从中提取数字。

所以我有字符串:1 2 3 4 /0
现在我想要一些变量,所以我可以将它们用作整数:a=1, a=2, a=3, a=4

我该怎么做?

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);

如果数字的数量不同,那么你需要解析字符串。

请相应澄清您的问题。