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.

La cadena más corta y la cadena más larga en el array

Tengo una tarea, necesito crear un método que reciba (char * * ch, site_t size).

ch es un arreglo de direcciones a arreglos de char, necesito hacer que el elemento más corto sea el primero (dirección y lugar) y el más largo sea el último (dirección y lugar). Esto es lo que he hecho hasta ahora, aunque no funciona con un tamaño de arreglo de 5 (solo lo probé con un tamaño de 4):

(Nota: Utilicé char * arr[] pero planeo cambiarlo una vez que el programa funcione con este tipo de variable.)

void AdressSwitcher(char * arr[], size_t size){ 
    char* shortest = arr[0];
    char* shortestFollower = NULL;
    char* longest = arr[1];
    char* longestFollower = NULL;
    
    for (size_t i = 0; i < size; i++){
        if (strlen(arr[i]) < strlen(shortest)){
            shortest = arr[i];
            arr[i] = arr[0];
        }
        arr[0] = shortest;
    }
    
    for (size_t i = 1; i < size; i++){
        if (strlen(arr[i]) > strlen(longest)){
            longest = arr[i];
            arr[i] = arr[size-1];
        }
        arr[size-1] = longest;
    }
    
    for (size_t i = 0; i < size; i++){
        printf("%s %p", arr[i], arr[i]);
        printf("\n");
    }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Este método AdressSwitcher toma como parámetros un array de direcciones (arr) de matrices de caracteres y el tamaño del array (size). El objetivo es reordenar el array de manera que el elemento más corto esté primero en el array y el más largo esté al final.

    Vamos a desglosar el código:

    void AdressSwitcher(char * arr[], size_t size){ 
        char* shortest = arr[0];
        char* shortestFollower = NULL;
        char* longest = arr[1];
        char* longestFollower = NULL;
    

    Primero, se declaran cuatro variables char*. shortest y longest se inicializan con arr[0] y arr[1] respectivamente, asumiendo que hay al menos 2 elementos en el array. Su propósito es llevar un registro del elemento más corto y más largo en el array mientras se itera.

    for(size_t i = 0; i < size; i++){
        if(strlen(arr[i]) < strlen(shortest)){
            shortest = arr[i];
            arr[i] = arr[0];
        }
        arr[0] = shortest;
    }
    

    A continuación, el bucle itera a través del array para encontrar el índice del elemento más corto. Si se encuentra un elemento más corto, shortest se reasigna y el valor del índice actual se intercambia con el valor del primer índice. Después del bucle, el elemento más corto se coloca al principio del array.

    for(size_t i = 1; i < size; i++){
        if(strlen(arr[i]) > strlen(longest)){
            longest = arr[i];
            arr[i] = arr[size - 1];
        }
        arr[size - 1] = longest;
    }
    

    Se utiliza otro bucle para encontrar el índice del elemento más largo. Si se encuentra un elemento más largo, longest se reasigna y el valor del índice actual se intercambia con el valor del último índice. Después del bucle, el elemento más largo se coloca al final del array.

    for(size_t i = 0; i < size; i++){
        printf("%s %p", arr[i], arr[i]);
        printf("\n");
    }
    

    Finalmente, se imprime el array actualizado para confirmar que los elementos están ordenados correctamente.

    En resumen, este método ordena el array de direcciones de matrices de caracteres de más corto a más largo, intercambiando los elementos en el array. Hay algunos problemas con el código, ya que no funciona correctamente para un tamaño de array de 5, pero una vez corregido, debería funcionar como se espera.

Comments are closed.