【问题标题】:Test converted int to char if it is number c++如果它是数字 c++,则测试将 int 转换为 char
【发布时间】:2014-10-10 14:13:41
【问题描述】:

我想知道如何测试 char 是否为数字。一个 int 已被转换为 char,稍后我想看看这个 char 是不是一个数字。

int num = 2;
char number = '2';
char num2 = (char)num;
cout << "Non comverted: " << number << " " << num2 << endl;
cout << "comverted: " << static_cast<int>(number) << " " << static_cast<int>(num2) << endl;
if (isdigit(number))
  cout << "number" << endl;
else if (isdigit(num2))
  cout << "num2" << endl;
else cout << "none" << endl;

当我运行这个时,第二个 if 也应该能够与 true 相关。

我之所以能够这样做,是因为我将很多不同的值存储到一个 char 数组中,以后想知道什么时候是数字。

非常感谢

【问题讨论】:

    标签: c++ char int


    【解决方案1】:

    您实际上并没有将num 转换为数字。您的第 3 行基本上会导致:

    char num2 = (char)2;
    

    十进制值为 2 的 ASCII 字符不是数字。事实上,它是不可打印的。将单个数字整数转换为其可打印的char 的最简单方法是将'0' 添加到其中:

    char num2 = '0' + num;
    

    这是因为字符0ASCII table中的第一个数字,后面紧跟着1、2、3等……

    编辑

    正如Christian Hackl 在 cmets 中指出的那样,c++ does not require an implementation to use ASCII,尽管它保证数字 09 由连续的整数值表示。

    【讨论】:

    • C++ 不需要实现来使用 ASCII,尽管它确实保证从 09 的范围是连续的。
    • 谢谢,我刚刚意识到我想做的事情无论如何都行不通
    【解决方案2】:

    要将单个数字从 int 转换为 ascii/utf8 字符,有一个非常简单的转换:

    char num2 = static_cast&lt;char&gt;('0' + num);

    【讨论】:

      【解决方案3】:

      这个:

      char num2 = (char)num;
      

      没有意义。您将 2 转换为 char,这将为您提供 STX 的 ASCII 码,一个特殊字符 (http://www.asciitable.com/)。

      你可能想要这个:

      char num2 = '0' + num;
      

      这样做是给你一个从 ASCII '0' 开始计数的字符,所以它最多可以工作到 9 个,之后你会得到 ASCII 表中所示的其他字符。

      【讨论】:

        猜你喜欢
        • 2015-12-18
        • 2015-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 2020-04-15
        • 1970-01-01
        相关资源
        最近更新 更多