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.

Estoy tratando de crear una función que verifique si todos los caracteres en una cadena son únicos, y que devuelva 0 si es así, o 1 si no lo son todos.

No estoy seguro de qué está mal con mi código. Parece imprimir 0 la mayoría de las veces, cuando cambio la cadena “word”. Agradecería cualquier ayuda/comentario, ¿es un problema con la lógica de mi código? Si es así, ¿dónde está y cómo puedo rectificarlo?

“`

include <stdio.h>

include <cs50.h>

include <string.h>

int checkuniqueletters(string words);

int main (void)
{
string word = “ABCB” ;
printf (“%i\n”, checkuniqueletters (word));
}

int checkuniqueletters (string words)
{
int j = 0;

do
{ int x = (int) (words [j]) ;
int y = 0;
for (int i=j + 1; i<strlen(words); i++)=”” {=”” if=”” ((int)words[i]=”=” x)=”” {=”” y=”” +=”1;” }=”” else=”” {=”” y+=”0;” }=”” }=”” if=”” (y=””>0)
{
return 1;
break;
}

else
{
    j = j+1;
}

}
while (j < strlen (words));

}</strlen(words);></string.h></cs50.h></stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el código está diseñado para verificar caracteres duplicados en una cadena dada. Sin embargo, solo devuelve 1 si encuentra el primer carácter duplicado y rompe el bucle. Esto significa que si existen caracteres duplicados más adelante en la cadena, la función no los detectará.

    Para solucionar este problema, debes eliminar la instrucción “break” dentro de la condición “if” y agregar una instrucción “return” fuera del bucle. De esta manera, la función seguirá verificando caracteres duplicados en toda la cadena y devolverá 1 si se encuentran duplicados.

    Además, el código se puede simplificar eliminando la sentencia “else” dentro del bucle “for” y simplemente incrementando “y” si se encuentra un carácter duplicado.

    Aquí está el código corregido:

    #include <stdio.h>
    #include <cs50.h>
    #include <string.h>
    
    int check_unique_letters(string words);
    
    int main (void)
    {
        string word = "ABCB";
        printf ("%i\n", check_unique_letters (word));
    }
    
    int check_unique_letters (string words)
    {
        for (int i = 0; i < strlen(words); i++)
        {
            for (int j = i+1; j < strlen(words); j++)
            {
                if (words[i] == words[j])
                {
                    return 1;
                }
            }
        }
    
        return 0;
    }
    

    En este nuevo código, utilizamos dos bucles “for” anidados para comparar cada carácter de la cadena con todos los caracteres que le siguen. Si se encuentra un duplicado, la función devuelve inmediatamente 1. Si el bucle se completa sin encontrar ningún duplicado, la función devuelve 0.</string.h></cs50.h></stdio.h>

Comments are closed.