#include #include #include #include char next_char(char texto[25], int *longitud){ char caracter; caracter = texto[*longitud]; (*longitud)++; return caracter; } char char_class(char caracter){ //mide que digito es if (isupper(caracter)){ return 1; //UPPERCASE }else if (islower(caracter)){ return 2; //LOWERCASE }else if (isdigit(caracter)){ return 3; //NUMBER }else{ return 4; //OTHER } } int next_state(int tipoCaracter, int old_state){ switch (old_state){ case 0: switch (tipoCaracter){ case 1: //UPPERCASE return 1; break; case 2: //LOWERCASE return 2; break; case 3: //DIGIT return 3; break; } break; case 1: switch (tipoCaracter){ case 1: //UPPERCASE return 6; break; case 2: //LOWERCASE return 2; break; case 3: //DIGIT return 5; break; } break; case 2: switch (tipoCaracter){ case 1: //UPPERCASE //return ; break; case 2: //LOWERCASE //return ; break; case 3: //DIGIT return 3; break; } break; case 3: switch (tipoCaracter){ case 1: //UPPERCASE //return ; break; case 2: //LOWERCASE //return ; break; case 3: //DIGIT return 7; break; } break; case 5: switch (tipoCaracter){ case 1: //UPPERCASE return 8; break; case 2: //LOWERCASE //return ; break; case 3: //DIGIT return 7; break; } break; case 6: switch (tipoCaracter){ case 1: //UPPERCASE //return ; break; case 2: //LOWERCASE //return ; break; case 3: //DIGIT return 7; break; } break; case 7: switch (tipoCaracter){ case 1: //UPPERCASE return 8; break; case 2: //LOWERCASE //return ; break; case 3: //DIGIT //return ; break; } break; case 8: switch (tipoCaracter){ case 1: //UPPERCASE //return ; break; case 2: //LOWERCASE return 9; break; case 3: //DIGIT //return ; break; } break; case 9: switch (tipoCaracter){ case 1: //UPPERCASE //return ; break; case 2: //LOWERCASE //return ; break; case 3: //DIGIT //return ; break; case 4: //OTHER return 10; break; } break; case 10: switch (tipoCaracter){ case 1: //UPPERCASE //return ; break; case 2: //LOWERCASE //return ; break; case 3: //DIGIT return 11; break; } break; /*case 11: switch (tipoCaracter){ case 1: //UPPERCASE return 1; break; case 2: //LOWERCASE return 3; break; case 3: //DIGIT return 3; break; } break;*/ } } /* * */ int main(int argc, char** argv) { int state; int token_type; // {password=1, error=0}; char input[25]; int longitud = 0; char character; int class; // {UPPERCASE=1, ...}; printf ("Please write your password (+ENTER): "); scanf("%s",&input); character = next_char(input, &longitud); state = 0; /* code for state 0 */ while (1){ class = char_class(character); state = next_state(class, state); switch(state){ case 1: /* building a password */ printf ("%c", character); break; case 2: /* accept state */ // caso 11 token_type = 1; //identifier break; case 3: /* error */ token_type = 0; //error break; } character = next_char(input, &longitud); } if (token_type==1) printf ("\nYour password IS VALID\n"); else printf ("\nPassword NOT VALID \n"); return (0); }