2011-01-03 1 views
15

Ho trovato qualche domanda in cui chiedevo come lasciare che char 'B' restituisse 'C' e poi 'D' ecc. Le risposte erano piuttosto complesse e quasi completamente esagerate.Incrementazione del carico

Perché non usare semplicemente questo:

char X='A'; 
X++ 

EDIT: Si va dalla A alla Z e poi?

risposta

19

Se sei soddisfatto dei risultati forniti, allora va bene.

Di solito quando ho visto domande del genere, vogliono passare da "Z" a "AA" o qualcosa del genere che però - come colonne di Excel. Chiaramente, l'incremento di un char non lo farà, ma andrebbe a "[".

In alternativa, anche all'interno di un singolo carattere, l'intervallo di valori validi può essere non contiguo: l'esempio ovvio è esadecimale. Se aumenti '9' ottieni ':' invece di 'a' o 'A' che probabilmente volevi. L'ordine desiderato è raramente "qualunque sia l'Unicode".

1

Probabilmente perché si intende anche passare da Z a AA, ala Perl e PHP.

28

Se si desidera solo per incrementare:

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

Ma, se si vuole un Excel come colonna:

// (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

perché così difficile? X ++ funziona bene – Loj

+1

Non mi piace ++ su un Char, questo è tutto ^^ E A = 65, Z = 90 a = 97, z = 122 Un Char ++ come vuoi non ti dava solo lettere, ma simboli come [^ ¨,; Quindi, se vuoi le lettere, devi limitare l'intervallo. Se vuoi Excel come nome di colonne, il codice che ho dato sopra. – kerrubin

+0

Sì, lo so, ma sto usando solo 30 di loro quindi dovrebbe funzionare credo. – Loj