0

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

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

4

3 回答 3

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

这虽然很丑!

于 2013-07-04T21:30:47.177 回答
1

StringBuilder使用 a而不是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)前面插入更重要的数字。

于 2013-07-04T21:36:27.487 回答
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;
}
于 2013-07-04T21:54:05.223 回答