2016-11-16 3 views
-4

Я хочу создать программу, которая позволит пользователю создать пароль и имя пользователя. Однако пароль должен быть от 6 до 10 символов. Как ограничить ввод символов? Кроме того, что, если я хочу, чтобы пароль включал заглавные буквы?C++ - Ограничить длину строки

Вот посмотрите на программу так далеко, чтобы дать вам представление о том, что я пытаюсь сделать (Примечание: я знаю, сама программа явно не закончена, но я просто хочу, чтобы дать вам визуальное):

#include <iostream> 
#include <string> 

int main(int argc, const char * argv[]) { 
    // insert code here... 

    std::cout << "--------------------------------------------------------------\n"; 
    std::cout << "   Welcome to the ECE!! Password Proram!\n"; 
    std::cout << "Username rules: must be 5-10 characters long with no space\n"; 
    std::cout << "Password rules: must be 6+ characters long\n"; 
    std::cout << "Must contain one uppercase letter and one number but no space\n"; 
    std::cout << "--------------------------------------------------------------\n"; 

    //Let's get our password! 
    std::string username; 
    std::string password; 
    const int 

    //use a do while loop for input validation 
    do {  
     std::cout << "Enter your username: "; 
     std::cin >> username;      //add input validation    
    } while(); 

    std::cout << "Enter your password:"; 
    std::cin >> password;  
    return 0; 
} 
+0

Прочтите руководство! – HazemGomaa

ответ

0

Чтобы ограничить ввод символов, вы должны проверить, имеет ли входная длина от 6 до 10 символов включительно. (Я не знаю дороги, чтобы отрезать вход после 10 символов) Вы бы сделать что-то вроде

start: // A label to direct where the program should go when goto is called. 
while(password.length() > 10 || password.length() < 5) 
{ 
    std::cout << "The password must be between 5 and 10 characters inclusive." << endl; 
    std::cin >> password; 
} 
// To check if there is a capital letter 
bool foundUpperLetter = false; 
for(int i = 0; i < password.length(); i++) 
{ 
    if(foundUpperLetter == true) 
     break; 
    if('A' <= password[i] && password[i] <= 'Z') 
     foundUpperLetter = true; 
} 
if(!foundUpperLetter) 
{ 
    std::cout << "You did not include an uppercase letter in your input. Please try again." << endl; 
    goto start; // Will make the program go back to label start. 
} 

Вы также можете добавить больше коды в предыдущий раздел для проверки других атрибутов, который требует пароля.

Источник: 15 месяцев кодирования для школы и личного удовольствия. Пожалуйста, добавьте свой собственный ответ, если есть лучший способ сделать что-то или если вы знаете способ отрезать вход после 10 символов

+0

Есть ли другой способ проверить заглавные буквы? То, как вы это сделали, это дает моим компиляторам некоторые ошибки (я использую mac) –

+0

@HassanKamara Я случайно что-то упустил, я исправил его –

+0

У меня возникли проблемы с интеграцией этих двух условий (первая проверка, чтобы убедиться, что она находится между 5-10 символов, а затем также проверять, имеет ли в нем заглавную букву. Моя идея состоит в том, чтобы печатать отдельные сообщения об ошибках, когда любое из этих условий нарушено, но так, как я их сейчас, он печатает оба сообщения об ошибках (один говорит, что пароль меньше 6 символов и что у него нет заглавной буквы) –

0

Поскольку вы используете std :: string, вы можете использовать password.size() после получение ввода пользователя и проверка, если размер находится в пределах 5 & 10. Если это не так, просто повторно запросите пользователя для другого пароля. Это было бы лучше всего сделать в цикле while. Вот пример некоторого кода с более высокого уровня:

do{ 
    std::cout << "Enter your password:"; 
    std::cin >> password; 
}while (password.size() < 6 || password.size() > 10) 

Вы уже делаете подобную вещь с именем пользователя, так что я был немного смущен, если вы хотели спросить о пароле или нет.

0

На понятном уровне: вы можете взять строковый ввод, проверить длину и другие свойства (т. Е. Содержать одну прописную букву), использовать ее для дальнейших операций. Если он не соответствует следующим критериям, попросите пользователя повторно ввести информацию.

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