J'essaie de trouver s'il existe un moyen rapide d'obtenir la position entière d'un caractère dans l'alphabet (C #).
Je peux simplement créer un tableau et obtenir la position, mais il semble qu'il y ait une façon "sympa et funky" de réaliser cela?
J'ai également envisagé de prendre la position ASCII du caractère (majuscule) par rapport à "65" ... mais encore une fois, semble plus de travail qu'il ne devrait l'être!
[Alphabet anglais à 26 lettres uniquement, aucune internationalisation requise - et non, ce ne sont pas des devoirs!]
Programmation 101:
char c = 'A';
//char c = 'b'; you may use lower case character.
int index = char.ToUpper(c) - 64;//index == 1
Pour les minuscules et les majuscules:
int index = (int)c % 32;
Puisque char
et int
peuvent être mélangés et mis en correspondance dans les calculs, vous pouvez traiter votre caractère comme un nombre (qui à coup sûr se situera entre des valeurs bien connues):
char c = 'A';
var index = (c < 97 ? c - 64 : c - 96);
Une implémentation claire, lisible et basée sur 0 de la méthode @ Ahmed avec vérification des limites.
/// <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';
}
Voici une belle implémentation pour lire des colonnes d'une chaîne Excel vers un numéro de colonne. bravo à @ ahmed-kraiem & @vladimir pour la réponse ci-dessus.
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;
}