将数字字符串转换为整数

3

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

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

我该怎么做?


问题(作业?)的难点在于理解它......我建议尝试重新表述一下。也许atoi()函数也能帮到你。 - PhiLho
4个回答

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将返回一个短项计数。

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()函数实现。

别忘了清理创建的副本。 - Tetha
我建议使用strtol()而不是atoi(),因为它具有明确定义的错误处理。此外,strdup()不是C标准函数(它在POSIX中),尽管实现自己的strdup()很简单。当然,在复制后应该free()。 - Chris Young

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

2
如果字符串始终包含用空格分隔的4个数字,则可以使用sscanf完成:
sscanf(string, "%d %d %d %d", &a, &b, &c, &d);

如果数字数量不同,那么您需要解析字符串。
请根据您的问题进行澄清。

请注意,sscanf()返回成功转换和分配说明符的数量(它不计算使用“%* d”记法抑制的那些说明符)。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接