Dev - C++ - ¿Cómo puedo validar que un nombre no contenga caracteres que no sean números o letras?

 
Vista:

¿Cómo puedo validar que un nombre no contenga caracteres que no sean números o letras?

Publicado por Jesus (16 intervenciones) el 11/08/2020 06:25:23
Hola. Soy algo nuevo en esto de programar en C++.
Tengo que validar que al ingresar un nombre no ingrese caracteres que no sean letras, números o espacios,
es decir, que se deba ingresar por ejemplo "mario kart 8". sin otro tipo de caracter.

También quisiera saber por qué sale un error de visual studio al ingresar un punto en un string.

Intenté hacerlo y así me quedó, pero no funciona. Lo hice por medio del codigo ascii (creo que así se usa).

Y ahora que lo pienso, todo esto lo podría hacer como do while no?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
cout << "Introduzca el nombre del videojuego" << endl;
getline(cin, videojuegos[i].nombrevideojuego);
 
//INICIA LA VALIDACION DEL NOMBRE DEL VIDEOJUEGO
 
for (int k = 0; k < 7; k++) {
 
    if (videojuegos[i].nombrevideojuego[k] < ' ' || videojuegos[i].nombrevideojuego[k] > 'z') {
        contadornombre++;
    }
    else {
        if (videojuegos[i].nombrevideojuego[k] > ' ' && videojuegos[i].nombrevideojuego[k] < '0') {
            contadornombre++;
        }
        else {
            if (videojuegos[i].nombrevideojuego[k] > '9' && videojuegos[i].nombrevideojuego[k] < 'A') {
                contadornombre++;
            }
            else {
                if (videojuegos[i].nombrevideojuego[k] > 'Z' && videojuegos[i].nombrevideojuego[k] < 'a') {
                    contadornombre++;
                }
            }
        }
    }
}
 
while (contadornombre > 0) {
    system("CLS");
    cout << "El nombre del videojuego tiene "<<contadornombre<<" caracteres incorrectos" << endl;
    cout << "Ingrese el nombre del videojuego correctamente" << endl;
    getline(cin, videojuegos[i].nombrevideojuego);
 
    contadornombre = 0;
 
    for (int k = 0; k < 7; k++) {
 
        if (videojuegos[i].nombrevideojuego[k] < ' ' || videojuegos[i].nombrevideojuego[k] > 'z') {
            contadornombre++;
        }
        else {
            if (videojuegos[i].nombrevideojuego[k] > ' ' && videojuegos[i].nombrevideojuego[k] < '0') {
                contadornombre++;
            }
            else {
                if (videojuegos[i].nombrevideojuego[k] > '9' && videojuegos[i].nombrevideojuego[k] < 'A') {
                    contadornombre++;
                }
                else {
                    if (videojuegos[i].nombrevideojuego[k] > 'Z' && videojuegos[i].nombrevideojuego[k] < 'a') {
                        contadornombre++;
                    }
                }
            }
        }
    }
 
}
 
//TERMINA LA VALIDACION DEL NOMBRE DEL VIDEOJUEGO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

¿Cómo puedo validar que un nombre no contenga caracteres que no sean números o letras?

Publicado por Nacho (181 intervenciones) el 11/08/2020 11:42:19
Un poco igual sí te has liado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool CaracteValido(char c)
{
    bool minuscula = (c >= 'a' && c <= 'z');
    bool numero = (c >= '0' && c <= '9');
    return minuscula || numero;
}
 
int main()
{
    char nombre[50];
    fgets(nombre, 50, stdin);
    for (int i = 0; i < strlen(nombre) - 1; i++)
    {
        if (!CaracteValido(nombre[i]))
        {
            //nombre invalido
        }
        // nombre válido
    }
}

Eso sólo comprueba si es una letra minúscula o un número.
También puedes comprobar si es un carácter que quieres con isalpha, isnumber, islower...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo puedo validar que un nombre no contenga caracteres que no sean números o letras?

Publicado por Efren (16 intervenciones) el 12/08/2020 05:49:51
Muchas gracias Nacho. Solo que no entiendo una cosa: if (!CaracteValido(nombre[i])) Eso cómo funciona? Lo que está dentro de If , y en si cómo funciona el booleano. Eso no me lo han enseñado. En serio gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo puedo validar que un nombre no contenga caracteres que no sean números o letras?

Publicado por Nacho (181 intervenciones) el 12/08/2020 13:51:08
nombre es una tabla de caracteres cuyo último valor es un 0, así que se puede recorrer posición por posición y cada posición es un carácter de la cadena. Así que en el if se manda cada carácter a la función a ver si es válido o no. Lo que devuelve la función se le da la vuelta con el !. El !, operador de negación, pasa los 0 a 1 y 1 a 0, o los true a false y false a true.

Con el for
1
2
3
4
5
6
7
8
for (int i = 0; i < strlen(nombre) - 1; i++)
{
    if (!CaracteValido(nombre[i]))
    {
        //nombre invalido
    }
}
// nombre válido

se van recorriendo todos los caracteres, y si llega al final sin encontrarse ninguno inválido es que el nombre es válido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar