web-dev-qa-db-ja.com

文字をアルファベットの整数位置に変換しますか?

アルファベット(C#)の文字の整数位置を取得する簡単な方法があるかどうかを探しています。

単純に配列を作成して位置を取得することはできますが、これを実現するための「素敵でファンキーな」方法があるはずです。

また、「=」に関連する(大文字)文字のASCII位置)を取得することも検討しましたが、これも本来よりも多くの作業のようです!

[英語の26文字のアルファベットのみ、国際化は不要-いいえ、これは宿題ではありません!]

24
BlueChippy

プログラミング101:

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

小文字と大文字の場合:

int index = (int)c % 32;
37
Vladimir

charintは計算で混合して一致させることができるため、charを数値として扱うことができます(これは確かに既知の値の間に収まります)。

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

境界チェック付きの@Ahmedのメソッドの、明確で読みやすい0ベースの実装。

/// <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';
}
3

以下は、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;
    }
1
TsTeaTime