在C#中将多位数转换为字母串的最佳方法是什么?
例如, 如果我有一个号码,
int digits = 1234567890
我希望将其转换为
的字符串string alpha = "ABCDEFGHIJ"
这意味着1代表A,2代表B,依此类推。
答案 0 :(得分:8)
这样的事情:
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代码点即可完成转换。
答案 1 :(得分:2)
首先,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
答案 2 :(得分:0)
没有太多不同的符号需要替换,只需简单的替换即可。
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);
答案 3 :(得分:0)
注意这个指示
output = (char)((char)'A' + (current - 1)) + output;
每次迭代都会创建新对象。 字符串连接必须使用StringBuilder ...
完成我必须对这篇文章的答案进行一般性的考虑。开发人员不仅要注意优雅,算法效率,还要注意内存效率。
C#不是C o C ++而对象是坏动物: - )
答案 4 :(得分:-1)
制作一组字符:
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];
}
Base是A char代码
这是伪代码,我没有测试过它!
它应该有用......
答案 5 :(得分:-1)
使用Dictionary课程,请查看此内容。