【问题标题】:Converting a string of numbers into integers将一串数字转换为整数
【发布时间】:2010-09-18 12:09:10
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

  • 问题中的难点(作业?)是理解它...我建议尝试重新制定它。或许 atoi() 函数也能帮到你。

标签: c string


【解决方案1】:

到目前为止给出的答案都是正确的,只要您的字符串格式符合您的预期。您应该始终检查 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 将返回一个简短的项目计数。

【讨论】:

    【解决方案2】:

    正如其他人所指出的,如果您知道预期有多少个数字,则 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() 会这样做。

    【讨论】:

    • 别忘了清理创建的副本。
    • 我建议使用 strtol() 而不是 atoi(),因为它具有明确定义的错误处理。此外, strdup() 不是 C 标准函数(它在 POSIX 中),尽管实现自己的 strdup() 是微不足道的。当然,copy 之后应该是 free()'d。
    【解决方案3】:

    如果字符串总是包含 4 个用空格分隔的数字,那么可以使用 sscanf 来完成:

    sscanf(string, "%d %d %d %d", &a, &b, &c, &d);
    

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

    请相应地澄清您的问题。

    【讨论】:

    • 请注意,sscanf() 返回成功转换和分配的说明符的数量(它不计算那些使用 '%*d' 表示法抑制的说明符)。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2010-12-31
      相关资源
      最近更新 更多