En este post de programación en C vamos a ver cómo comprobar si una cadena tiene al menos un número y una letra (puede servir para validar una contraseña).
Básicamente veremos si la cadena es alfanumérica regresando un resultado falso o verdadero en una función. Todo esto en lenguaje C que también sirve en C++.
Explicación del algoritmo
Lo que haremos primero será establecer dos banderas. Una indicará si se encontró una letra, y otra indicará si se encontró un número.
Luego vamos a recorrer la cadena letra por letra, comprobar si es número o letra y cambiar las banderas booleanas previamente definidas.
Al terminar de iterar la string vamos a comprobar si ambas banderas fueron establecidas en true
(o en 1, ya que en C los booleanos no están estandarizados) para indicar que la cadena es o no es alfanumérica.
Nota: podemos usar isalpha
para saber si un carácter está en el alfabeto, y podemos usar isdigit
para saber si un carácter es un número. Estas funciones están definidas en ctype
.
Saber si string es alfanumérica en C
Vayamos al código para comprobar si una cadena en C es alfanumérica. He encerrado el comportamiento en una función y queda así:
int esAlfanumerica(char *cadena)
{
int i;
int tieneLetra = 0;
int tieneNumero = 0;
for (i = 0; i < strlen(cadena); i++)
{
char letra = cadena[i];
if (isalpha(letra))
{
tieneLetra = 1;
}
if (isdigit(letra))
{
tieneNumero = 1;
}
}
return tieneLetra && tieneNumero;
}
Nota: si tú no puedes usar strlen revisa el post que te dejé anteriormente en donde indico cómo recorrer una cadena sin esa función.
Poniendo todo junto
![Saber si cadena es alfanumérica en C (tiene una letra y un número)](https://parzibyte.me/blog/wp-content/uploads/2022/04/Saber-si-cadena-es-alfanumerica-en-C-tiene-una-letra-y-un-numero.png)
Anteriormente te mostré la función para saber si una cadena de C es alfanumérica o mejor dicho saber si una string tiene al menos una letra y un número.
A continuación veamos cómo usar esa función:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int esAlfanumerica(char *cadena)
{
int i;
int tieneLetra = 0;
int tieneNumero = 0;
for (i = 0; i < strlen(cadena); i++)
{
char letra = cadena[i];
if (isalpha(letra))
{
tieneLetra = 1;
}
if (isdigit(letra))
{
tieneNumero = 1;
}
}
return tieneLetra && tieneNumero;
}
int main()
{
// https://parzibyte.me/blog
char cadena[] = "Parzibyte 123";
if (esAlfanumerica(cadena))
{
printf("Es alfanumerica\n");
}
else
{
printf("No es alfanumerica\n");
}
}
Recuerda que la misma solo te regresará true
si es que la cadena que le envías tiene al menos una letra y un número.
Para terminar te dejo con más tutoriales de C en mi blog.