如何检查String是否具有按1234之类的升序排列的数字?

时间:2019-05-23 20:15:54

标签: c# string numbers

对于家庭作业,我必须创建一个程序来扫描用户输入的“密码”,并显示该密码的强弱。

我的条件之一是检查密码字符串是否连续包含数字,例如mypass123。

我已经尝试过了,但是它不接受字母:

int DigitCounter = 0;
var DigitRow = string.Join("", Password.OrderBy(i => int.Parse(i.ToString())));

for(int i = 0; i < Password.Length; ++i)
{
    if(Password == DigitRow)
    {
        DigitCounter++;
    }
}

3 个答案:

答案 0 :(得分:1)

使用正则表达式尝试这种方法:

foreach (var numberGroup in new Regex("[0-9]{2,}").Matches(Password))
{
    if (numberGroup.Value.OrderBy(c => c).SequenceEquals(numberGroup.Value))
    {
         // numbers in ascending order!
    }
}

[0-9]{2,}将匹配包含两个或多个彼此相邻的数字的输入字符串的每个部分。然后,我们尝试按数字对输入字符串进行排序,查看字符串是否已更改-如果它没有按顺序包含数字

答案 1 :(得分:0)

字符串中的每个字符都可以转换为数字,具体取决于编码。
在ASCII中,A是65,B是66,依此类推。可以通过将它们强制转换为int((int) Password[0])并进行比较来获得它们。

Password = "12345";
var array = Password.Select(i => (int) i).ToList();
// array: { 49, 50, 51, 52, 53 }
// Use your way to check if they are in a row!

答案 2 :(得分:0)

您可以尝试使用以下功能

 public static bool IsStrong(string pass)
        {

            bool isStrong = false;
            int num = 0;
            var stringArr = pass.ToCharArray();
            var numsArr = new List<int>();

            foreach (var a in stringArr)
            {
                if (int.TryParse(a.ToString(), out num))
                {
                    numsArr.Add(num);
                }
            }

            if (numsArr.Any())
            {
                for (int i = 1; i < numsArr.Count(); i++)
                {
                    if(numsArr[i] - numsArr[i-1] != 1)
                    {
                        isStrong = true;
                    }
                }
            }

            return isStrong;

        }