2013-07-04 44 views
0

將int轉換爲字符串而不使用本地轉換函數的最有效代碼是什麼?如何將int轉換爲C#中的字符串而不使用庫函數?

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? 
    } 

上述似乎並不奏效。請指教。

+2

什麼?你爲什麼這樣做? –

+0

這是一個學校作業,因此不適合我們。 –

+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; 
} 
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

可能更容易使用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)允許你在前面插入更顯著數字。

+0

你認爲'x%10 +'0''是什麼? –

+0

@DavidHeffernan:你是對的;我假定OP的代碼部分是正確的。現在修復。 – Douglas