8 Stimmen

Wie lässt sich eine Zahl am besten in eine Buchstabenfolge umwandeln?

Wie konvertiert man am besten eine mehrstellige Zahl in eine Buchstabenfolge in C#?

Zum Beispiel, wenn ich eine Nummer habe, sagen wir,

int digits = 1234567890

Ich möchte, dass dies in eine Zeichenkette umgewandelt wird, die wie folgt lautet

string alpha = "ABCDEFGHIJ"

Das heißt, 1 steht für A, 2 für B und so weiter.

8voto

Pieter van Ginkel Punkte 28696

Etwa so:

int input = 123450;
string output = "";

while (input > 0)
{
    int current = input % 10;
    input /= 10;

    if (current == 0)
        current = 10;

    output = (char)((char)'A' + (current - 1)) + output;
}

Console.WriteLine(output);

Dies erspart Ihnen die Mühe, eine Konvertierungsliste über ein Array oder ein Wörterbuch definieren zu müssen. Die Konvertierung kann einfach durch die Berechnung des korrekten Unicode-Codepunkts erfolgen.

2voto

alex Punkte 3652

Erstens würde 0123 als 123 interpretiert werden, die führende 0 würde also ignoriert werden. Hier ist eine mögliche Lösung:

int i = 1230468;
StringBuilder res = new StringBuilder(i.ToString());

for (int j = 0; j < res.Length; j++)
   res[j] += (char)(17); // '0' is 48, 'A' is 65

Console.Out.WriteLine(res.ToString()); // result is BCDAEGI

0voto

Albin Sunnanbo Punkte 45302

Es gibt nicht allzu viele verschiedene Symbole zu ersetzen, ein einfaches Ersetzen wäre leicht.

int digits = 0123456789;
string digitsAsString = digits.ToString("0000000000"); // Trick to preserve the 0.
string alpha = digitsAsString
    .Replace('0', 'A')
    .Replace('1', 'B')
    .Replace('2', 'C')
    .Replace('3', 'D')
    .Replace('4', 'E')
    .Replace('5', 'F')
    .Replace('6', 'G')
    .Replace('7', 'H')
    .Replace('8', 'I')
    .Replace('9', 'J');
Console.WriteLine(alpha);

0voto

robob Punkte 1630

Bitte beachten Sie diese Anweisung

output = (char)((char)'A' + (current - 1)) + output;

Bei jeder Iteration werden neue Objekte erstellt. String-Verkettung muss mit StringBuilder durchgeführt werden ...

Ich muss eine allgemeine Überlegung zu den Antworten auf diesen Beitrag anstellen. Ein Entwickler muss nicht nur auf die Eleganz oder die Effizienz des Algorithmus achten, sondern auch auf die Speichereffizienz.

C# ist nicht C o C++ und Objects sind böse Tiere :-)

-1voto

robob Punkte 1630

Ein Array von Zeichen erstellen:

char alphabet = {'A','B','C' .... }

Verwenden Sie dann die Zahl der Ziffern als Index für das Feld:

digit = 14567
char[] digit_ar = new String(digit).ToCharArray();

foreach (char c in digit_ar)
{
    string s+=digit_ar[Convert.ToInt32(c)-Base];
}

Basis ist der A-Char-Code

Dies ist ein Pseudo-Code und ich habe ihn nicht getestet!

Es sollte funktionieren...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X