猿问

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

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

所以我看了一下 toString 方法的源代码,但是它使用了很多其他的库。我想将整数转换为字符串,但我不确定如何逐个处理数字。

如果我能做到这一点,我可以继续将整数转换为字符,最后将所有字符相加为字符串。

有人可以帮忙吗?


哈士奇WWW
浏览 87回答 3
3回答

喵喵时光机

这是与其他答案类似的方法。要点:我们通过找到一个数字除以 10 时的余数来计算最后一位数字(即lastDigit = number % 10;)要丢弃数字的最后一位,只需将其除以 10。当以这种方式查找数字时,它们当然会以相反的顺序返回(最低有效数字在前),因此您必须颠倒数字才能得到正确的答案。一种方法是从 char 数组的末尾存储到开头。负数必须特别处理。最简单的方法是记下数字是负数,以便-在适当的时候添加符号;然后,否定数字使其为正。但是,请注意,您不能 negate&nbsp;int.MinValue,因此必须特别处理。您可以通过将数字char添加到 char'0'并将结果转换回char.这是一种使用这些要点的方法:public static string MyToString(int number){&nbsp; &nbsp; if (number == int.MinValue)&nbsp; &nbsp; &nbsp; &nbsp; return "-2147483648"; // Special case.&nbsp; &nbsp; char[] digits = new char[64]; // Support at most 64 digits.&nbsp; &nbsp; int last = digits.Length;&nbsp; &nbsp; bool isNegative = number < 0;&nbsp; &nbsp; if (isNegative)&nbsp; &nbsp; &nbsp; &nbsp; number = -number;&nbsp; &nbsp; do&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; digits[--last] = (char) ('0' + number % 10);&nbsp; &nbsp; &nbsp; &nbsp; number /= 10;&nbsp; &nbsp; }&nbsp; &nbsp; while (number != 0);&nbsp; &nbsp; if (isNegative)&nbsp; &nbsp; &nbsp; &nbsp; digits[--last] = '-';&nbsp; &nbsp; return new string(digits, last, digits.Length-last);}我认为您要问的主要部分是如何一个接一个地获取数字的数字,do/while上面的循环回答了这个问题。

繁星coding

我不明白为什么不允许您使用任何库。但是,如果您需要完全手动进行转换,您可以这样做private static string IntToString(int i){&nbsp; &nbsp; string[] digits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};&nbsp; &nbsp; string sign = (i < 0 ? "-" : "");&nbsp; &nbsp; var absI = (i < 0 ? -i : i);&nbsp; &nbsp; string result = "";&nbsp; &nbsp; while (absI != 0)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; int digit = absI % 10;&nbsp; &nbsp; &nbsp; &nbsp; result = digits[digit] + result;&nbsp; &nbsp; &nbsp; &nbsp; absI = (absI - digit) / 10;&nbsp; &nbsp; }&nbsp; &nbsp; return sign + result;}上面的代码不能正常工作为零。如果您需要,添加起来非常简单。

犯罪嫌疑人X

例如,您可以将您的号码拆分为单个字符:// Note that this is just for example and for positive numbers only.IEnumerable<char> ToChar(int num){&nbsp; &nbsp; while (num > 0)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; // adding '0' to number will return char for that number&nbsp; &nbsp; &nbsp; &nbsp; char ch = (char)(num % 10 + '0');&nbsp; &nbsp; &nbsp; &nbsp; num /= 10;&nbsp; &nbsp; &nbsp; &nbsp; yield return ch;&nbsp; &nbsp; }}然后基于此创建新字符串:string ToString(int num){&nbsp; &nbsp; // ToChar will return char collection in reverse order,&nbsp; &nbsp; // so you will need to reverse collection before using.&nbsp; &nbsp; // Well in your situation you will be probably needed to&nbsp; &nbsp; // to write Reverse method by yourself, so this is just for&nbsp; &nbsp; // working example&nbsp; &nbsp; var chArray = ToChar(num).Reverse().ToArray();&nbsp; &nbsp; string str = new string(chArray);&nbsp; &nbsp; return str;}和用法:int i = 554;string str = ToString(i);参考:DotNetFiddle 示例(使用简化的 ToChar() 方法)
随时随地看视频慕课网APP
我要回答