2015-10-16 4 views
-3

Это моя домашняя работа, отредактировал его:проверяет, является ли строка допустимым паролем

Некоторые веб-сайты устанавливают определенные правила для паролей. Напишите функцию, которая проверяет, является ли строка допустимым паролем. Предположим, что правила пароля следующие:

  • Пароль должен иметь не менее восьми символов.
  • Пароль состоит только из букв и цифр.
  • Пароль должен содержать не менее двух цифр.

Написать C# программу, которая предлагает пользователю ввести пароль и отображает Valid пароль, если правила соблюдаются или 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; 
    } 
} 

Но есть проблема, я не могу найти

+4

Тест на счет должен быть выполнен после выхода из цикла ... loop – Steve

+1

В чем проблема, которую вы не можете найти? – user1666620

+1

@Steve Хорошая находка, эта проблема приводит к тому, что for-loop выходит из первого раза, когда находит цифру во входной строке. Я бы добавил это как ответ. –

ответ

0

Я думаю, что это больше, что вы ищете:

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/. Это быстрое чтение, и вы получаете правильное состояние при написании кода.

Смежные вопросы