Каков наилучший способ преобразования числа в строку алфавита? - PullRequest
7 голосов
/ 21 октября 2010

Каков наилучший способ преобразования многозначного числа в строку алфавита в C #.

Например, если у меня есть число, скажем,

int digits = 1234567890

Я хочу, чтобы это было преобразовано в строку, которая будет

string alpha = "ABCDEFGHIJ"

Это означает, что 1 представляетA, 2 представляет собой B и т. Д.

Ответы [ 6 ]

8 голосов
/ 21 октября 2010

Примерно так:

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);

Вышесказанное избавляет вас от необходимости определять список конверсий через массив или словарь.Преобразование может быть выполнено простым вычислением правильной кодовой точки Unicode.

2 голосов
/ 21 октября 2010

Прежде всего, 0123 будет интерпретироваться как 123, поэтому ведущий 0 будет игнорироватьсяВот одно из возможных решений:

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
0 голосов
/ 21 октября 2010

Обратите внимание на эту инструкцию

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

На каждой итерации он создает новые объекты. Конкатенация строк должна выполняться с помощью StringBuilder ...

Я должен сделать общий анализ ответов на этот пост. Разработчик должен обращать внимание не только на элегантность или эффективность алгоритма, но и на эффективность памяти.

C # не является C o C ++, а Объекты являются плохими животными: -)

0 голосов
/ 21 октября 2010

Не так много разных символов для замены, просто заменить будет просто.

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);
0 голосов
/ 21 октября 2010

Используйте Словарь класс, посмотрите на это.

0 голосов
/ 21 октября 2010

Создайте массив символов:

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

Затем используйте цифру в качестве индекса массива:

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

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

База - код A

Это псевдокод, и я его не проверял!

Должно работать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...