在不使用本机转换函数的情况下将int转换为字符串的最有效代码是什么。
public static void Main(string[] args)
{
string y = Convert(990);
Console.WriteLine(y);
Console.ReadLine();
}
public static string Convert(int x)
{
char[] Str = new char[20];
int i = 0;
while (x != 0)
{
Str[i++] = x % 10 + '0';
x = x / 10;
}
return Str.ToString();// How do I handle this without the native function?
}
以上似乎不起作用。请指教。
答案 0 :(得分:1)
您正在将最低有效数字添加到字符串的开头。你需要反转字符串,或者以相反的顺序添加数字,或者插入它们而不是附加它们。
你需要做一些演员。例如,这是一种方法:
Str[i++] = (char)(x % 10 + '0');
最后,你不能像这样使用ToString()
。你想要这个:
return new string(Str, 0, i);
虽然StringBuilder
可能更合适。
请注意,您的代码无法正确处理负输入值或零值。
所以,这是一个处理所有这些的版本:
public static string Convert(int x)
{
if (x == 0)
{
return "0";
}
StringBuilder sb = new StringBuilder();
string prefix = "";
if (x < 0)
{
prefix = "-";
x = -x;
}
while (x != 0)
{
sb.Insert(0, (char)(x % 10 + '0'));
x = x / 10;
}
return prefix + sb.ToString();
}
虽然这很丑陋!
答案 1 :(得分:1)
使用StringBuilder
而不是char
数组构建结果可能更容易:
public static string Convert(int x)
{
StringBuilder sb = new StringBuilder();
while (x != 0)
{
sb.Insert(0, (char)(x % 10 + '0'));
x = x / 10;
}
return sb.ToString();
}
Insert(0, x)
允许您在前面插入更有效的数字。
答案 2 :(得分:1)
这是一个没有String构造函数或.ToString()调用的解决方案。这个处理负数。 根据我的口味,这有点过于“聪明”,但无论如何这都是学术活动......
void Main()
{
Console.WriteLine(Convert(-5432));
}
String Convert(int i)
{
return String.Join("",Digits(i).Reverse());
}
IEnumerable<char> Digits(int i)
{
bool neg = false;
if(i==0) {yield return '0'; yield break;}
if(i<0) { i = -i; neg = true;}
while (i!=0)
{
char digit = (char)(i % 10 + '0');
i = i / 10;
yield return digit;
}
if(neg) yield return '-';
yield break;
}