2011-01-03 10 views
15

Encontré una pregunta preguntándome cómo dejar que char 'B' devuelva 'C' y luego 'D', etc. Las respuestas fueron bastante complejas y en su mayoría simplemente exageradas.Incremento de char

Por qué no usar simplemente esto:

char X='A'; 
X++ 

EDIT: Se extiende desde la A a la Z y qué sigue?

Respuesta

19

Si está satisfecho con los resultados que ofrece, está bien.

Normalmente cuando he visto preguntas como esa, quieren pasar de "Z" a "AA" o algo así, como columnas de Excel. Claramente, simplemente incrementar un char no hará eso, iría a '['.

Alternativamente, incluso dentro de un solo carácter, el rango de valores válidos puede ser no contiguo, el ejemplo obvio es hexadecimal. Si incrementa '9' obtiene ':' en lugar de la 'a' o 'A' que probablemente desee. El orden deseado raramente es "lo que Unicode te dé".

1

Probablemente porque también está destinado a pasar de Z a AA, ala Perl y PHP.

28

Si lo que desea es la subasta:

Char x = 'A'; 
Char y = (Char)(Convert.ToUInt16(x) + 1); 

Pero, si quieres una columna de Excel como:

// (1 = A, 2 = B...27 = AA...703 = AAA...) 
    public static string GetColNameFromIndex(int columnNumber) 
    { 
     int dividend = columnNumber; 
     string columnName = String.Empty; 
     int modulo; 

     while (dividend > 0) 
     { 
      modulo = (dividend - 1) % 26; 
      columnName = Convert.ToChar(65 + modulo).ToString() + columnName; 
      dividend = (int)((dividend - modulo)/26); 
     } 

     return columnName; 
    } 

    // (A = 1, B = 2...AA = 27...AAA = 703...) 
    public static int GetColNumberFromName(string columnName) 
    { 
     char[] characters = columnName.ToUpperInvariant().ToCharArray(); 
     int sum = 0; 
     for (int i = 0; i < characters.Length; i++) 
     { 
      sum *= 26; 
      sum += (characters[i] - 'A' + 1); 
     } 
     return sum; 
    } 
+2

por qué es tan difícil? X ++ funciona bien – Loj

+1

No me gusta ++ en un Char, eso es todo ^^ Y A = 65, Z = 90 a = 97, z = 122 Un Char ++ como usted quiere no le dio solo letras, sino símbolos como [^ ¨,; Entonces, si quiere letras, debe limitar el rango. Si desea que Excel le de nombre a las columnas, el código que doy más arriba. – kerrubin

+0

Sí, lo sé, pero solo estoy usando 30, así que debería funcionar, supongo. – Loj