c# - algoritmo para convertir numeros a letras
¿Convertir el carácter a su posición del entero del alfabeto? (5)
Aquí hay una buena implementación para leer columnas de una cadena de Excel a un número de columna. felicitaciones a @ ahmed-kraiem y @vladimir por la respuesta anterior.
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;
}
Estoy tratando de encontrar si hay una forma rápida de obtener la posición entera de un carácter en el alfabeto (C #).
¿Puedo simplemente crear una matriz y obtener la posición, pero parece que debe haber una forma "agradable y original" de lograr esto?
También he considerado tomar la posición ASCII del carácter (en mayúsculas) en relación con "65" ... ¡pero, de nuevo, parece más trabajo de lo que debería ser!
[Sólo el alfabeto de 26 letras en inglés, no se requiere internacionalización, y no, ¡esto no es tarea!]
Debido a que char
y int
pueden combinarse y combinarse en los cálculos, puede tratar a su personaje como un número (que seguramente se ubicará entre valores conocidos):
char c = ''A'';
var index = (c < 97 ? c - 64 : c - 96);
Para mayúsculas y minúsculas:
int index = (int)c % 32;
Programación 101:
char c = ''A'';
//char c = ''b''; you may use lower case character.
int index = char.ToUpper(c) - 64;//index == 1
Una implementación clara, legible y basada en 0 del método de @ Ahmed con verificación de límites.
/// <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'';
}