【问题标题】:How to convert Int To String in C# without using library functions?如何在不使用库函数的情况下在 C# 中将 Int 转换为 String?
【发布时间】:2013-07-02 22:15:04
【问题描述】:

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

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

【问题讨论】:

  • 什么?你为什么要这么做?
  • 这是一项学校作业,因此不适合我们做。
  • 什么可以用什么不能用?
  • 虽然是一个明显的课堂或面试问题,但至少您发布了代码。另外,它给了我一个编写“聪明”代码的借口。偶尔开心。

标签: c# arrays string char int


【解决方案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;
}

【讨论】:

    【解决方案2】:

    使用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) 允许您在前面插入更高的有效数字。

    【讨论】:

    • 你认为x % 10 + '0'是什么?
    • @DavidHeffernan:你是对的;我假设那部分 OP 的代码是正确的。现已修复。
    【解决方案3】:

    您正在将最低有效数字添加到字符串的开头。您需要反转字符串,或者以相反的顺序添加数字,或者插入它们而不是附加它们。

    而且你需要做一些铸造。例如,这是一种方法:

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

    虽然这很丑!

    【讨论】:

      猜你喜欢
      • 2018-03-06
      • 2021-04-30
      • 2014-05-19
      • 1970-01-01
      • 2019-01-07
      • 2013-07-08
      • 1970-01-01
      • 2015-11-19
      • 2022-01-01
      相关资源
      最近更新 更多