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.

¿Por qué la respuesta enviada está incorrecta?

#include<stdio.h>
#include<string.h>

void f(char *s[],int n)
{
int i = 0;
int j = 0;
int x = 0;
int k = i;

for (x = 0; x < n-1; x++)
{
    for(j = 0; j < n-1; j++)
    {
        if(strcmp(*(s+j)+i, *(s+j+1)+i) > 0)
        {
            char *temp;
            temp = *(s+j);
            *(s+j) = *(s+j+1);
            *(s+j+1) = temp;
        }
        else if(strcmp(*(s+j)+i, *(s+j+1)+i) == 0)
        {
            for(k = 1; k < n-1; k++)
            {
                if(strcmp(*(s+j)+k, *(s+j+1)+k) > 0)
                {
                    char *temp;
                    temp = *(s+j);
                    *(s+j) = *(s+j+1);
                    *(s+j+1) = temp;
                    break;
                }
            }
        }
    }
}

}

int main()
{
int n = 0;
char * str[100];
char a[100][100];
while(n <= 100 && fgets(a[n], sizeof(a[n]), stdin) != NULL)
{
str[n] = a[n];
n++;
}

f(str,n);

int i = 0;
for(i = 0; i < n; i++)
{
    printf("%s", str[i]);
}
return 0;

}

In Spanish:

#include<stdio.h>
#include<string.h>

void f(char *s[],int n)
{
int i = 0;
int j = 0;
int x = 0;
int k = i;

for (x = 0; x < n-1; x++)
{
    for(j = 0; j < n-1; j++)
    {
        if(strcmp(*(s+j)+i, *(s+j+1)+i) > 0)
        {
            char *temp;
            temp = *(s+j);
            *(s+j) = *(s+j+1);
            *(s+j+1) = temp;
        }
        else if(strcmp(*(s+j)+i, *(s+j+1)+i) == 0)
        {
            for(k = 1; k < n-1; k++)
            {
                if(strcmp(*(s+j)+k, *(s+j+1)+k) > 0)
                {
                    char *temp;
                    temp = *(s+j);
                    *(s+j) = *(s+j+1);
                    *(s+j+1) = temp;
                    break;
                }
            }
        }
    }
}

}

int main()
{
int n = 0;
char * str[100];
char a[100][100];
while(n <= 100 && fgets(a[n], sizeof(a[n]), stdin) != NULL)
{
str[n] = a[n];
n++;
}

f(str,n);

int i = 0;
for(i = 0; i < n; i++)
{
    printf("%s", str[i]);
}
return 0;

}

Explanation:
The code provided is written in C language and its purpose is to sort an array of strings in alphabetical order without using the strcmp function. The code reads input from the user until a maximum of 100 strings are entered. It then calls the function f to sort the strings and finally prints the sorted array.

The issue with the code is that it uses the gets function, which is unsafe and should be avoided. I replaced it with the fgets function, which is safer and takes care of buffer overflow.

Additionally, I added the #include<string.h> directive to include the header file containing the strcmp function. This was necessary to compare the strings in the sorting process.

Finally, I changed the puts function to printf in the last loop, so that the strings are printed with a line break between them.</string.h></string.h></stdio.h></string.h></stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo proporcionar una respuesta definitiva sin ejecutar el código y probarlo con las entradas adecuadas, ni sin experimentar el problema exacto mencionado por el usuario. Sin embargo, puedo identificar algunos problemas potenciales con el código:

    1. El uso de la función gets(): La función gets() se sabe que es insegura y vulnerable a ataques de desbordamiento de búfer. Lee datos del flujo hasta que encuentra un carácter de nueva línea, pero no realiza ninguna comprobación de límites en la entrada, lo que puede provocar un desbordamiento de búfer. Se recomienda utilizar fgets() en su lugar, que permite especificar el número máximo de caracteres a leer.

    2. La definición de la función f(): La función f() no está claramente definida y no tiene una descripción adecuada o comentarios que expliquen su propósito y parámetros. No está claro qué hace la función y por qué es necesaria para el programa. Esto puede llevar a confusiones y dificultades para mantener y modificar el código.

    3. Falta de verificación de errores: El programa no contiene ninguna verificación de errores o validación de los datos de entrada. Por ejemplo, no comprueba si el tamaño del array de entrada excede la capacidad máxima o si las cadenas de entrada contienen caracteres o símbolos inválidos. Esto puede provocar un comportamiento inesperado o bloqueos durante la ejecución.

    4. Uso de punteros: El programa utiliza extensivamente punteros y aritmética de punteros para manipular cadenas y arrays, lo que puede hacer que el código sea difícil de leer y entender. Se recomienda utilizar nombres de variables más descriptivos y enfoques orientados a objetos en lugar de operaciones de puntero de bajo nivel.

    5. Complejidad del algoritmo de ordenamiento: El código utiliza el algoritmo de ordenamiento de burbuja para ordenar el array de cadenas de entrada, que tiene una complejidad temporal de O(n^2) y puede ser lento para tamaños de entrada grandes. Se recomienda utilizar algoritmos de ordenamiento más eficientes, como quicksort o mergesort, para mejorar la escalabilidad y el rendimiento.

Comments are closed.