【问题标题】:Can Anyone explained the like char - 'a'任何人都可以解释一下 char - 'a'
【发布时间】:2020-04-15 19:22:05
【问题描述】:
struct Node{
    bool isTerminal_;
    char ch_;
    Node* children_[26];
    Node(char c='\0'){
        isTerminal_ = false;
        ch_=c;
        for(int i = 0 ; i < 26; i++){
            children_[i]=nullptr;
        }
    }

    //given a lower case alphabetic character ch, returns the associated index 'a'-> 0, 'b'->1....
    int getIndex(char c){
        if(c=='\0'){
            return 0;
        }
        return c -'a';
    }
};

找到了这段代码,但我不明白“return c-'a';”是怎么回事作品。它应该给出一个字母的索引,但是 char - char 是如何工作的?

【问题讨论】:

  • 查看ASCII table 将帮助您理解。如果c = 'z',你有'z' (122) - 'a' (97) = 25
  • char 只是另一种整数。所以 char - char 只是整数减法。
  • 好的,谢谢 :) 链接帮助很大
  • char 是数字类型。代码假设c 代表a..z 之间的一个字母。在 ASCII 中,字母是连续的,其中a 是 97,b 是 98,等等,所以从 ch='a' 中减去 'a' 返回 0,从 ch='b' 中减去 'a' 返回 1,以此类推。
  • 评论者和发布答案的人很容易采用 ASCII 编码,这是一种奇思妙想。问题中的任何内容都无法确保它。请注意,那里有不止一种编码,特别是有一种 EBDIC 编码。而且 C++ 并没有与 ASCII 结合。

标签: c++ char


【解决方案1】:

字符可以表示为 ASCII 数字。

这是对 ASCII 表的引用:http://www.asciitable.com/

假设 c = 'b',在表中,'b' 等于 98,'a' 等于 97,所以 98 - 97 = 1。

【讨论】:

  • C++ 标准不要求编译的程序使用 ASCII。对于其他字符编码,此代码将无法正常工作。
【解决方案2】:

每个字符都有一个整数值,您可以在 ASCII 表中找到。大写“A”的值为 65,大写“B”的值为 66('A'+1),因此通过执行 ch-'a' 您将获得字符的索引(例如:ch='b' ch- 'a'=1)

【讨论】:

  • C++ 标准不要求编译的程序使用 ASCII。此代码无法正常工作的其他字符编码。
猜你喜欢
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多