如何在不使用库函数的情况下在C#中将Int转换为String?

时间:2013-07-04 21:20:16

标签: c# arrays string char int

在不使用本机转换函数的情况下将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?
    }

以上似乎不起作用。请指教。

3 个答案:

答案 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;
}