如何在不使用其他类库的情况下编写toString方法

时间:2019-01-15 12:57:55

标签: c#

我想编写自己的toString方法,因为不允许使用任何类库。

因此,我研究了toString方法的源代码,但是它使用了许多其他库。我想将整数转换为字符串,但是我不确定如何才能一一解决数字。

如果可以的话,我可以继续将整数转换为一个字符,最后将所有字符加为一个字符串。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

我不明白为什么不允许您使用任何库。但是,如果您需要完全手动进行转换,则可以执行以下操作

private static string IntToString(int i)
{
    string[] digits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
    string sign = (i < 0 ? "-" : "");
    var absI = (i < 0 ? -i : i);
    string result = "";
    while (absI != 0)
    {
        int digit = absI % 10;
        result = digits[digit] + result;
        absI = (absI - digit) / 10;
    }
    return sign + result;
}

上面的代码不能正常工作为零。如果需要,添加非常简单。

答案 1 :(得分:1)

例如,您可以将数字分成多个单独的字符:

// Note that this is just for example and for positive numbers only.
IEnumerable<char> ToChar(int num)
{
    while (num > 0)
    {
        // adding '0' to number will return char for that number
        char ch = (char)(num % 10 + '0');
        num /= 10;
        yield return ch;
    }
}

然后基于此创建新字符串:

string ToString(int num)
{
    // ToChar will return char collection in reverse order,
    // so you will need to reverse collection before using.
    // Well in your situation you will be probably needed to
    // to write Reverse method by yourself, so this is just for
    // working example
    var chArray = ToChar(num).Reverse().ToArray();
    string str = new string(chArray);
    return str;
}

和用法:

int i = 554;
string str = ToString(i);

参考:DotNetFiddle Example (with simplified ToChar() method)

答案 2 :(得分:1)

以下是其他答案的类似方法。

要点:

  1. 我们通过查找数字除以10的余数(即lastDigit = number % 10;)来计算数字的最后一位
  2. 要舍弃数字的最后一位,只需将其除以10。
  3. 以这种方式查找数字时,它们当然将以相反的顺序返回(最低的数字在前),因此您必须将数字反向以得到正确的答案。一种方法是从char数组的末尾开始存储。
  4. 负数必须特别处理。最简单的方法是注意数字为负数,以便在适当时可以添加-符号;然后,将数字取反以使其为正。但是,请注意,您不能取反int.MinValue,因此必须进行特殊处理。
  5. 您可以通过将数字添加到字符char并将结果转换回'0'的方式,将数字转换为等效的char

以下是使用这些要点的方法:

public static string MyToString(int number)
{
    if (number == int.MinValue)
        return "-2147483648"; // Special case.

    char[] digits = new char[64]; // Support at most 64 digits.
    int last = digits.Length;
    bool isNegative = number < 0;

    if (isNegative)
        number = -number;

    do
    {
        digits[--last] = (char) ('0' + number % 10);
        number /= 10;
    }
    while (number != 0);

    if (isNegative)
        digits[--last] = '-';

    return new string(digits, last, digits.Length-last);
}

我认为您要询问的主要部分是如何获取数字的数字,该数字由上面的do/while循环来回答。


[EDIT]解决了以下评论中提出的问题。