【问题标题】:Split("") does not split string into one character array [duplicate]Split("") 不会将字符串拆分为一个字符数组 [重复]
【发布时间】:2023-03-11 19:22:02
【问题描述】:

我是 C# 和类 C 语言的新手,在我的代码中找不到错误。 运动描述:

票号通常由偶数位组成。一张票 如果数字的前半部分相加,则数字被认为是幸运的 等于后半部分的总和。

给定一张票号 n,判断它是否幸运。

例子

对于 n = 1230,输出应该是 isLucky(n) = true;对于 n = 239017, 输出应该是 isLucky(n) = false。输入/输出

【执行时间限制】3秒(cs)

[输入] 整数 n

票号表示为带有偶数的正整数 位数。

保证约束:10 ≤ n

[输出] 布尔值

如果 n 是幸运票号,则为 true,否则为 false。

我的代码:

bool isLucky(int n)
{
    string ticket = n.ToString();
    int firstSum = 0;
    int secondSum = 0;
    string[] ticketStrArr = ticket.Split("");
    int lenHalf = ticketStrArr.Length / 2;

    for(int i = 0; i < lenHalf; i++)
    {
        firstSum = firstSum + Int32.Parse(ticketStrArr[i]);
        secondSum = secondSum + Int32.Parse(ticketStrArr[i + lenHalf]);
    }

    return (firstSum == secondSum);
}

【问题讨论】:

  • 这是开始使用调试器的绝佳机会。使用调试器,您可以在代码执行时逐行单步执行代码,观察确切的运行时行为并更改变量的值。当你这样做时,哪个操作首先产生了意想不到的结果?操作中使用的值是什么?结果如何?预期的结果是什么?为什么?
  • 似乎一个好的步进调试器对解决这个问题很有用。 Try this one

标签: c#


【解决方案1】:

C# 字符串被认为是 char 数组,因此根本不需要拆分。

这应该可以解决问题,正如其他 cmets 所说,使用调试器非常有用。

编辑 - 正如下面评论中所说的 madreflection 使用从 char 到 int 的隐式转换来获得正确的值,而不是 int.Parse() 或 Convert.ToInt32();

    bool isLucky(int n)
    {
        string ticket = n.ToString();
        int firstSum = 0;
        int secondSum = 0;
        //string[] ticketStrArr = ticket.Split();
        int lenHalf = ticket.Length / 2;

        for (int i = 0; i < lenHalf; i++)
        {
            firstSum += ticket[i] - '0';
            secondSum += ticket[i + lenHalf] - '0';
        }

        return (firstSum == secondSum);
    }

【讨论】:

  • 不需要Convert.ToInt32(),或者...只需使用charint的隐式转换。 firstSum += ticket[i] - '0';
  • 另外,.NET Core 2.0+ 在问题中使用了Split overload
  • 好吧,Convert.ToInt32(ticket[i]) is 错了,因为 Convert.ToInt32('0') 返回 48,而不是 0。这就是我在评论中包含 - '0' 的原因。
  • @madreflection 感谢您提供 .NET Core 2.0+ 参考,我不知道正在使用什么。我也更新了答案以更正Convert.ToInt32()
猜你喜欢
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 2011-12-20
  • 2011-08-28
  • 2015-01-23
  • 1970-01-01
相关资源
最近更新 更多