Hola a todos!
Me ha surgido la necesidad den mi programa de convertir un numero sea el que sea a una cadena alfabética. es decir
1->a
2->b
.
.
.
555123->asakdads-> o la que le corresponda (he puesto un numero al azar)
Y la verdad es que llevo horas dándole duro a la función y no consigo nada bueno, lo único que e conseguido ahora es que genere bien hasta la ZZ, ya que cuando pasa a AAA solo avanza la primera y última letra, es decir nunca cambia la de en medio, ademas de que nunca pasa de esas 3 letras.
Os pongo lo que tengo por si podéis ayudarme o indicarme un poco por donde tirar
Saludos y gracias
Private Function prueba(ByVal num As Integer) As String
Dim listaLetrasArray As String() = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
If (num > 25) Then
Dim numeroentero As Integer = (num \ 26) - 1
If (numeroentero > 25) Then
Dim chi As Integer = numeroentero \ 26
chi = numeroentero / 26
numeroentero = numeroentero - (26 * (numeroentero \ 26))
num = num - (26 * ((num \ 26) - 1))
Else
num = num - (26 * (num \ 26))
End If
Return listaLetrasArray(numeroentero) & prueba(num)
Else
Return listaLetrasArray(num)
End If
End Function
¿y si lo analizas cifra por cifra? se me ocurre transformarlo a texto y recorrer cada caracter.
dim strnum as string = cstr(2561)
for each c as char in strnum
' codigo que sustituye el carácter
next
igual simplifica todo un poco.
creo que no valdría, ya que no se puede analizar numero por numero, si no que hay que analizar el numero en si ya que si por ejemplo tenemos el número 26, si lo analizamos carácter a carácter el resultado que daría seria -> BF siendo realmente el valor correspondiente Z.
La cosa esta en que sería convertir el número que tengo, el cual estará en base 10, a base 26, ya que el alfabeto tiene 26 letras, y de ahí sacar las letras que el corresponden.
creo que la parte conflictiva es esta:
CitarReturn listaLetrasArray(numeroentero) & prueba(num)
yo intentaría hacerlo con un loop, evitando la autollamada.