我想编写自己的toString方法,因为不允许使用任何类库。
因此,我研究了toString方法的源代码,但是它使用了许多其他库。我想将整数转换为字符串,但是我不确定如何才能一一解决数字。
如果可以的话,我可以继续将整数转换为一个字符,最后将所有字符加为一个字符串。
有人可以帮忙吗?
答案 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);
答案 2 :(得分:1)
以下是其他答案的类似方法。
要点:
lastDigit = number % 10;
)来计算数字的最后一位-
符号;然后,将数字取反以使其为正。但是,请注意,您不能取反int.MinValue
,因此必须进行特殊处理。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]解决了以下评论中提出的问题。