【问题标题】:Check if integer in 3rd position is 5检查第 3 位的整数是否为 5
【发布时间】:2014-03-27 22:16:10
【问题描述】:

我试图想出一个表达式来检查给定整数,如果它从右到左的第三个数字是 5。 到目前为止,我管理的是:

string input = "5";

if (Regex.IsMatch(input[2].ToString(), "[5]"))
{
    System.Console.WriteLine("yes");
}
else
    System.Console.WriteLine("no");

有两个问题:

首先它从左到右而不是从右到左计数 第二,当数字小于 3 位时,例如在这种情况下返回超出范围异常。

【问题讨论】:

  • 再清楚一点,你的确切问题是什么?

标签: c# exception integer


【解决方案1】:

使用数字方式。如果数字大于 99 并且 n 是您的整数,则使用

(n / 100) % 10 == 5

n / 100 删除最后两位数字(整数除法截断),% 10 提取现在最右边的数字。检查是否为 5。

这将比使用正则表达式快得多。

【讨论】:

  • 谢谢。这是完美的。
  • @PhilipStefanov,请务必支持此答案并将其标记为正确,以便 Bathsheba 回答您的问题时获得积分。
  • 不适用于:我正在尝试提出一个表达式,如果它从 从右到左的第三个数字是 5,则检查给定整数.
【解决方案2】:

Bathsheba 的回答要好得多,但是如果你想使用正则表达式,我相信这个会满足你的需求:^\d+(?:[5](\d){2})$

【讨论】:

  • 这是一个丑陋的正则表达式。我为自己感到羞耻。
  • +1 用于查找正则表达式。而且大多数正则表达式都很丑。
  • @Bathsheba,你肯定有道理。大多数正则表达式都很丑陋,但它们所代表的可以是美丽的。如果我要修改这个,它真的是这个正则语言的正则表达式。我不认为我现在拥有的正则表达式是真正的regular,因为它具有捕获组。 :P 我可以想到一个漂亮的有限自动机来解决这个问题,但我认为正则表达式会更丑。
【解决方案3】:

参考@Bathsheba 的概念,

(n % 1000) / 100 == 5

可以做同样的事情。

(n % 1000) 从右到左最多保留 3 位数

/100 取第三位

【讨论】:

    【解决方案4】:

    是的,RegEx 并不是我真正会考虑的东西。由于已经有一个聪明的非转换答案,我将给出转换为字符串的最简单答案;

      if (myInt.ToString().Length >= 3 && myInt.ToString()[2] == '5')
           //it's good
      else
          // it's bad
    

    由于 C# 中的复合表达式短路,如果不用担心得到 IndexOutOfRangeException,我可以将这两个语句放在同一条语句中

    【讨论】:

      【解决方案5】:

      因为问题是:

      从右到左

      if (myInt.ToString().Length >= 3 && myInt.ToString()[myInt.ToString().Length - 3] == '5')
         //it's good
      else
         //it's bad
      

      【讨论】:

        【解决方案6】:

        Console.Write("请输入一个数字:");

                    long n = long.Parse(Console.ReadLine());
                    bool result = false;
        
                    if ((n % 1000) / 100 == 5)
                    {
                        result = true;
                    }
                    Console.WriteLine(result);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-19
          相关资源
          最近更新 更多