【问题标题】:int to padded-zeroes stringint 到填充零字符串
【发布时间】:2012-02-17 06:14:31
【问题描述】:

我有一个数字需要与 3 个字符串进行比较。该号码的长度永远不会超过 3 位数。

例如,我需要将 3、300 和 13 与“003”、“300”和“013”等字符串进行比较。

我认为最简单的比较方法是将整数转换为字符串格式,然后使用strcmp 将“003”与“003”进行比较。

我只是不确定如何确定需要填充多少个字符,尤其是如何正确分配和转换。

有什么建议吗?我在想我可以检查number - 100 < 0。如果是,则意味着需要填充数字而不仅仅是转换。我也可以使用number - 10 < 0 来查看它是不是像13 或3 这样的数字。所以我可以确定填充零的确切数量,但在那之后我就迷路了。

【问题讨论】:

    标签: c string int type-conversion


    【解决方案1】:

    我认为最简单的比较方法是如果我能得到整数 转换成他们的字符串格式,然后用strcmp比较'003'和'003'

    我认为使用strtoul 并将字符串转换为整数是最简单的。

    3 == strtoul("003", NULL, 10);
    

    【讨论】:

    • 所以“003”会正确变成3吗?处理前导零没有问题吗? ...阅读手册页,它不会认为 003 是八进制吗?
    • @user974703 前导零没有问题。
    • @user974703:只要指定基数为 10,前导零就没有问题。如果您未指定基数 (0),则前导零将导致该数字被解释为八进制。
    【解决方案2】:

    为了方便起见,我们将您要比较的数字称为(int) num 和字符串(char *) str。

    您可以使用s(n)printf 将数字转储到字符串缓冲区并比较结果字符串:

    char str2[16];
    snprintf(str2, sizeof(str2), "%03d", num);
    if (strcmp(str, str2) == 0) { ... }
    

    不过,将字符串转换为整数并进行比较可能会更容易:

    if (num == atoi(str)) { ... }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-18
      • 2011-03-08
      • 2011-05-27
      • 2018-11-14
      • 1970-01-01
      • 2010-09-24
      • 2017-04-04
      • 2021-04-26
      相关资源
      最近更新 更多