为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
哈士奇WWW 2022-07-23 09:30:22
我想编写自己的 toString 方法,因为我不允许使用任何类库。所以我看了一下 toString 方法的源代码,但是它使用了很多其他的库。我想将整数转换为字符串,但我不确定如何逐个处理数字。如果我能做到这一点,我可以继续将整数转换为字符,最后将所有字符相加为字符串。有人可以帮忙吗?
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

这是与其他答案类似的方法。

要点:

  1. 我们通过找到一个数字除以 10 时的余数来计算最后一位数字(即lastDigit = number % 10;

  2. 要丢弃数字的最后一位,只需将其除以 10。

  3. 当以这种方式查找数字时,它们当然会以相反的顺序返回(最低有效数字在前),因此您必须颠倒数字才能得到正确的答案。一种方法是从 char 数组的末尾存储到开头。

  4. 负数必须特别处理。最简单的方法是记下数字是负数,以便-在适当的时候添加符号;然后,否定数字使其为正。但是,请注意,您不能 negate int.MinValue,因此必须特别处理。

  5. 您可以通过将数字char添加到 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上面的循环回答了这个问题。


查看完整回答
反对 回复 2022-07-23
?
繁星coding

TA贡献1797条经验 获得超4个赞

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


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;

}

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


查看完整回答
反对 回复 2022-07-23
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

例如,您可以将您的号码拆分为单个字符:


// 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 示例(使用简化的 ToChar() 方法)


查看完整回答
反对 回复 2022-07-23
  • 3 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信