【问题标题】:checks whether a string is a valid password检查字符串是否为有效密码
【发布时间】:2016-01-15 15:49:18
【问题描述】:

这是我的作业,已编辑:

一些网站对密码有一定的规定。编写一个检查字符串是否为有效密码的函数。假设密码规则如下:

  • 密码必须至少包含八个字符。
  • 密码仅由字母和数字组成。
  • 密码必须至少包含两位数字。

编写一个 C# 程序,提示用户输入密码,如果遵循规则则显示 Valid Password,否则显示 Invalid Password

这就是我现在所做的:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Please enter a Password: ");
        String password = Console.ReadLine();

        if (isValid(password))
        {
            Console.WriteLine("Valid Password");
        }
        else
        {
            Console.WriteLine("Invalid Password");
        }
    }

    public static bool isValid(String password)
    {
        if (password.Length < 8)
        {
            return false;
        }
        else
        {
            char c;
            int count = 1;
            for (int i = 0; i < password.Length - 1; i++)
            {
                c = password[i];
                if (!Char.IsLetterOrDigit(c))
                {
                    return false;
                }
                else if (Char.IsDigit(c))
                {
                    count++;
                    if (count < 2)
                    {
                        return false;
                    }
                }
            }
        }
        return true;
    }
}

但是有一个问题我找不到

【问题讨论】:

  • 退出for...循环后执行count测试
  • 你找不到什么问题?
  • @Steve 很好,这个问题会导致 for 循环在第一次在输入字符串中找到一个数字时退出。我会添加它作为答案。
  • “它不起作用。”不是一个好的问题陈述。
  • 感谢@RonBeyer,但作为一个家庭作业,我会让发帖者自己尝试一下。这会比给他写代码更有用

标签: c# string passwords


【解决方案1】:

我认为这更符合您的要求:

    static void Main(string[] args)
    {
        Console.WriteLine("Please enter a Password: ");
        var password = Console.ReadLine();
        Console.WriteLine(IsValid(password) ? "Valid Password" : "Invalid Password");
        Console.ReadLine();
    }

    public static bool IsValid(string password)
    {
        var charactersInPassword = password.ToCharArray();
        if (charactersInPassword.Length < 8) return false;
        if (charactersInPassword.Any(character => !char.IsLetterOrDigit(character)))
            return false;

        var numberOfDigits = charactersInPassword.Count(char.IsDigit);
        return numberOfDigits >= 2;
    }

如果您对编程感兴趣,我建议您为自己准备一个好的代码分析工具。我不认识任何没有 Resharper/Productivity 电动工具之类的开发人员。它将帮助您以更少的冗余编写更好的代码。最好将内置的 .net 功能用于字符串等(如 ToCharArray)。您可能已经被教导使用:

for (int i = 0; i < password.Length - 1; i++)

写一些可以写得更清晰、更容易的东西是一种漫长而烦人的方式,例如:

foreach (var characterInPassword in password.ToCharArray())

另外,我知道您不是用 Python 编写的,但值得一读:https://www.python.org/dev/peps/pep-0020/。这是一个快速阅读,它让你在编写代码时处于正确的心态。

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 2018-06-15
    • 2019-05-05
    • 2019-10-04
    • 1970-01-01
    • 2013-02-13
    • 2018-02-02
    相关资源
    最近更新 更多