2253 - Validador de Senhas

Ou você morre como herói ou vive o suficiente para se tornar o programador que faz a verificação de senhas...

Descrição

Solução

É mais fácil pensar nesse problema como um for que passa em cada letra e no final do for você precisa ter algumas variáveis com valor verdadeiro e outras com valor falso. Se tivermos uma variável indicando se vimos alguma caractere que não é letra nem número, no final queremos que essa variável seja falsa. Se tivermos uma variável cada para indicar se vimos uma maiúscula, uma minúscula ou um número, queremos que todas essas variáveis no final sejam verdadeiras. Com isso, com esse raciocínio, se torna um pouquinho mais fácil fazer esse programa, apenas lembrando que se ele não tiver o tamanho recomendado, você não precisa perder seu tempo fazendo o for, pode ir direto para a próxima senha.

#include <string.h>
#include <stdio.h>
#include <ctype.h>

int main(){
    char S[101];
    int n, errado, maiuscula, minuscula, numero;

    while(gets(S) != NULL){
        n = strlen(S);

        if(n < 6 || n > 32){
            printf("Senha invalida.\n");
            continue;
        }

        errado = 0, maiuscula = 0, minuscula = 0, numero = 0;

        for(int i = 0; i < n; ++i){
            if(isalpha(S[i])){
                if(S[i] == tolower(S[i]))   minuscula = 1;
                else                        maiuscula = 1;
            }else if(isdigit(S[i]))         numero = 1;
            else{
                errado = 1;
                break;
            }
        }

        if(errado || !(maiuscula && minuscula && numero)){
            printf("Senha invalida.\n");
        }else{
            printf("Senha valida.\n");
        }
    }

    return 0;
}

Last updated