检查第三位是否为5的整数

3

我想要编写一个表达式,检查给定的整数是否从右往左数第三位是5。 目前我编写的代码如下:

string input = "5";

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

这里有两个问题:

首先它是从左向右计数,而不是从右向左计数;其次,当数字小于3位数时(就像在这种情况下),会返回“超出范围异常”。

6个回答

10

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

(n / 100) % 10 == 5

n / 100除去最后两位数字(整数除法截断),而% 10则提取现在的个位数字。检查它是否为5。

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


不适用于:我正在尝试想出一个表达式,检查给定的整数是否从右到左的第三位是5。 - csharpwinphonexaml

1

Bathsheba的答案更好,但如果您想使用正则表达式,我相信这个可以满足您的需要:^\d+(?:[5](\d){2})$


1
请参考@Bathsheba的概念。
(n % 1000) / 100 == 5

我能做同样的事情。

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

/100 取第3个数字。


0

由于问题是:

从右到左

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

0

控制台.写("输入一个数字: ");

            long n = long.Parse(Console.ReadLine());
            bool result = false;

            if ((n % 1000) / 100 == 5)
            {
                result = true;
            }
            Console.WriteLine(result);

0

是的,正则表达式在这里并不是我考虑的东西。由于已经有一个聪明的非转换答案,所以我将只给出最简单的转换为字符串的答案;

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

由于在 C# 中复合表达式具有短路特性,因此我可以在同一个 if 语句中使用这两个语句,而不必担心出现 IndexOutOfRangeException


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接