【问题标题】:C++ calculating a char's order [duplicate]C ++计算char的顺序[重复]
【发布时间】:2016-08-29 14:52:39
【问题描述】:

我很好奇这是如何产生所提供的输出的。输出为 4,这是字母表中的第 5 个字符(这是预期的),随后的字母字符一直工作到 z 字符,它也返回 25。

示例程序

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string str = "e";
  int numericalvalue = ((str[0]) - 'a');  //this line of code im trying to understand
  cout << numericalvalue;
  return 0;
}

【问题讨论】:

  • 你熟悉 ASCII 表吗?
  • 字符在内部只是数字(参见 ASCII 表),您所做的就是减去字符所代表的数字。
  • 是的,但是字符 e 的十进制值是 101。这是从它中减去 a 的值然后返回它吗?
  • 没有必要对合法问题投反对票。用户可能是编程新手。
  • 是的,它所做的只是 101(e) - 97(a),结果为 4

标签: c++


【解决方案1】:

它与 ASCII 表有关。

它在集合中的字符被分配一个唯一的整数。在您的情况下,文字 'a' 在 ASCII 表中的值为 97,而字符 e 的值为 101。通过减去 101 - 97 = 4,您将得到最终结果。

有关 ASCII 表的更多信息,请参阅here

【讨论】:

  • 谢谢,是的,这就是我上面问的。谢谢
【解决方案2】:

char 是一个整数类型,因此它可以隐式转换(具体来说,它经历了整数提升)到类型int。可以用基本char 表示的每个字符都有一个从 0 到 255(或 -128 到 127)的数值。所以说'a' - '0'实际上是有效的,因为它就像说97 - 48ints一样。

【讨论】:

    【解决方案3】:

    字符“a”的十进制值为ASCII 97。

    “a”之后的字母的十进制值大于 97。

    减法

    str[0] - 'a'
    

    使用 ASCII 十进制值产生字母在字母表中的位置。

    【讨论】:

      【解决方案4】:
      char e = 'e';
      char a = 'a';
      std::cout << "e = " << static_cast<int>(e) << std::endl;
      std::cout << "a = " << static_cast<int>(a) << std::endl;
      

      计算机没有像“字符”这样抽象的东西。 它们仅适用于 1 和 0 ..(数字)。 计算机使用数字工作,但知道,一旦它在屏幕上打印出来,就使用 .ttf 文件中代表该“字符”的图形。

      【讨论】:

        猜你喜欢
        • 2019-06-02
        • 2011-03-26
        • 2015-01-12
        • 2013-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-12
        • 2022-07-14
        相关资源
        最近更新 更多