Search code examples
c#stringalgorithmint

How do I convert an Int to a String in C# without using ToString()?


Convert the following int argument into a string without using any native toString functionality.

public string integerToString(int integerPassedIn){    
    //Your code here
}

Since everything inherits from Object and Object has a ToString() method how would you convert an int to a string without using the native ToString() method?

The problem with string concatenation is that it will call ToString() up the chain until it hits one or hits the Object class.

How do you convert an integer to a string in C# without using ToString()?


Solution

  • Something like this:

    public string IntToString(int a)
    {    
        var chars = new[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
        var str = string.Empty;
        if (a == 0)
        {
            str = chars[0];
        }
        else if (a == int.MinValue)
        {
            str = "-2147483648";
        }
        else
        {
            bool isNegative = (a < 0);
            if (isNegative)
            {
                a = -a;
            }
    
            while (a > 0)
            {
                str = chars[a % 10] + str;
                a /= 10;
            }
    
            if (isNegative)
            {
                str = "-" + str;
            }
        }
    
        return str;
    }
    

    Update: Here's another version which is shorter and should perform much better, since it eliminates all string concatenation in favor of manipulating a fixed-length array. It supports bases up to 16, but it would be easy to extend it to higher bases. It could probably be improved further:

    public string IntToString(int a, int radix)
    {
        var chars = "0123456789ABCDEF".ToCharArray();
        var str = new char[32]; // maximum number of chars in any base
        var i = str.Length;
        bool isNegative = (a < 0);
        if (a <= 0) // handles 0 and int.MinValue special cases
        {
            str[--i] = chars[-(a % radix)];
            a = -(a / radix);
        }
    
        while (a != 0)
        {
            str[--i] = chars[a % radix];
            a /= radix;
        }
    
        if (isNegative)
        {
            str[--i] = '-';
        }
    
        return new string(str, i, str.Length - i);
    }