将字符转换为字母整数位置?

我试图找到是否有一种快速的方法来获得字母表中字符的整数位置(C#)。

我可以简单地创建一个数组并获得位置,但似乎必须有一个“漂亮和时髦”的方式来实现这个目标?

我还考虑了将(大写)字符的ASCII位置与“65”相关联……但是,再次看起来似乎比它应该更多的工作!

[仅英文26字母字母,不需要国际化 – 不,这不是作业!]

编程101:

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

对于大小写:

 int index = (int)c % 32; 

由于charint可以在计算中混合和匹配,因此您可以将char视为一个数字( 肯定会在众所周知的值之间):

 char c = 'A'; var index = (c < 97 ? c - 64 : c - 96); 

一个清晰,可读,基于0的@ Ahmed方法的实现,带有边界检查。

 ///  /// Converts a latin character to the corresponding letter's index in the standard Latin alphabet ///  /// An upper- or lower-case Latin character /// The 0-based index of the letter in the Latin alphabet private static int GetIndexInAlphabet(char value) { // Uses the uppercase character unicode code point. 'A' = U+0042 = 65, 'Z' = U+005A = 90 char upper = char.ToUpper(value); if (upper < 'A' || upper > 'Z') { throw new ArgumentOutOfRangeException("value", "This method only accepts standard Latin characters."); } return (int)upper - (int)'A'; } 

这是一个很好的实现,用于从Excel字符串读取列到列号。 感谢@ ahmed-kraiem和@vladimir的上述答案。

  public int AddColFromLetter(string s) { int column = 0; int iter = 1; foreach (char c in s) { int index = char.ToUpper(c) - 64;//Ahmed KRAIEM //int index = (int)c % 32;//Valdimir if(iter == 1) column += index; if(iter > 1) column += 25+ index; iter++; } return column; }