es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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;
}

Tags:  , , ,

Answer

  1. Avatar for 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ón if antes de la comprobación de strchr:

    if (c == '\n')
    {
        continue;
    }
    

    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:

    if (inputFile == NULL)
    {
        printf("Error opening file\n");
        return false;
    }
    

    En general, el código actualizado debería verse así:

    bool check_bad_characters(FILE *inputFile)
    {
        int c;
        char valid_characters[28] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
        if (inputFile == NULL)
        {
            printf("Error opening file\n");
            return false;
        }
        while ((c = fgetc(inputFile)) != EOF) {   
            if (c == '\n')
            {
                continue;
            }
            if (strchr(valid_characters, c) == NULL)
            {
                // Esto significa que había un carácter en el archivo de entrada
                // que no es válido.
                return false;
            }    
        }
        return true;
    }
    

    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.

Comments are closed.