¿Alguien sabe cuál es la mejor forma en C para comprobar si un carácter está en una cadena?
Tengo un string por ejemplo “ABCDEFG……”, y quiero comprobar si un cierto carácter está en esta cadena o no (la cadena también contiene el carácter de nueva línea). Tengo el siguiente código, pero parece que no funciona. ¿Alguien tiene alguna idea mejor?
Actualmente usando strchr para verificar si resulta ser NULL, lo que significa que el carácter actual en el bucle no está presente en la variable valid_characters.
bool check_bad_characters(FILE* inputFile)
{
int c;
char valid_characters[28] = “ABCDEFGHIJKLMNOPQRSTUVWXYZ “;
while ((c = fgetc(inputFile)) != EOF) {
char charC = c + ‘0’;
if (strchr(valid_characters, c) == NULL && strncmp(&charC, “\n”, 1) != 0)
{
// Esto significa que había un carácter en el archivo de entrada
// que no es válido.
return false;
}
}
return true;
}
davy.ai
Hay algunas cosas que podrían estar causando problemas para que el código no funcione correctamente. Primero, la línea
char charC = c + '0';
está convirtiendo el carácter a su valor ASCII, lo cual no es lo que se quiere. Puedes simplemente comprobar por el carácter de nueva línea por separado añadiendo una instrucciónif
antes de la comprobación destrchr
:Esto saltará sobre el carácter de nueva línea y no lo considerará un carácter malo.
En segundo lugar, asegúrate de que el archivo de entrada se esté abriendo y leyendo correctamente. Puedes añadir una comprobación de error antes del bucle
while
para asegurarte de que el archivo se abrió correctamente:En general, el código actualizado debería verse así:
Esto debería comprobar adecuadamente la cadena de entrada en busca de cualquier carácter malo e ignorar el carácter de nueva línea.