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

时间:2013-11-18 09:52:18

标签: c# alphabetical

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

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

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

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

5 个答案:

答案 0 :(得分:62)

编程101:

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

答案 1 :(得分:33)

对于大写和小写:

int index = (int)c % 32;

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

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

/// <summary>
/// Converts a latin character to the corresponding letter's index in the standard Latin alphabet
/// </summary>
/// <param name="value">An upper- or lower-case Latin character</param>
/// <returns>The 0-based index of the letter in the Latin alphabet</returns>
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';
}

答案 4 :(得分:1)

这是一个很好的实现,用于将列从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;
    }