【问题标题】:Whats the theory behind subtracting from .ToUpper()从 .ToUpper() 减去背后的理论是什么
【发布时间】:2015-04-14 22:23:37
【问题描述】:

Convert character to its alphabet integer position?

上面一行询问了一个问题,即如何获得字母表中字母位置的索引数值。接受的答案是:

char c = 'A';
//char c = 'b'; you may use lower case character.
int index = char.ToUpper(c) - 64;//index == 1

有人可以向我解释一下这个理论吗?为什么以及如何工作?

【问题讨论】:

  • “理论”是用处理器可以处理的数字表示字母表中的字母。你引用的不是一个很好的理论,大约有 40 亿人根本不这样做。给予或接受十亿。

标签: c#


【解决方案1】:

65 是 A 的十进制值。之后,字母十进制值增加 1。您可以在此处查看 ASCII 表以供参考。 http://www.asciitable.com/

从 64 中减去,然后将为您提供相对于从 1 开始的索引的字母索引。

【讨论】:

  • 它不是基于 0 的索引。如果减去 65,则为真。
【解决方案2】:

将char 转换为int 会将ASCII 数值分配给int(因为每个字符实际上只是存储为一个数字)。 ASCII "a" 等于 97,大写 "A" 等于 65。使用ToUpper() 转换意味着每个值将介于 65 和 90 之间(至少对于字母字母而言)。

现在所有字母都在同一范围内,减去 65 将导致字母的“索引”从 1 开始。请参阅这个方便的ASCII decimal chart。

【讨论】:

  • 我喜欢这里的速度 :)
  • 那么索引“0”是什么? :p
  • 嗯,从 65 中减去 64 是 1,所以它从 1 开始,如果 OP 选择它可以基于 0...
【解决方案3】:

在 ASCII 中,每个字母都由一个数字表示。 'A' 由数字 65 表示。因此,如果您想知道字母的索引,只需从中减去 64。

【讨论】:

    【解决方案4】:

    看看 ASCII 码。字符只是存储为数字,但计算机知道哪个数字代表哪个字符。所以 65 是 A,而 66 是 B(a 的数字不是 A)。你可以写得更具可读性:

    char.ToUpper(c) - 'A'; // in your case + 1, because A has index 1 not 0
    

    【讨论】:

    • 不确定 c 和 t 是小写字母是否会使代码更具可读性,所以... Java 和 C# 也不使用 ASCII - 它们使用“发生”的 Unicode 子集匹配 ASCII 表。
    • 我同意这是一个品味问题。但如果您不熟记 ASCII 表,那肯定是更快的方法。
    • 我建议编辑掉“Java 更具可读性”,因为它与问题完全无关......方法的大写约定并没有太大的区别,而且真的是个人喜好:@ 987654324@ 与 char.ToUpper(c)-'A' ...
    • 我只是把它和 Java 一起放在那里,因为我需要有人确认它也可以在 C# 中以这种方式工作......或者它不能。如果不是这样,它仍然会有所帮助,因为问题更多的是关于概念,C# 和 Java 恰好是两个例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2015-06-09
    • 2013-01-22
    • 2018-03-19
    • 2016-07-18
    • 2011-11-04
    • 2019-06-23
    相关资源
    最近更新 更多