Ordenar una array bidimensional dinámica de strings

Requisito previo: ¿Cómo asignar dinámicamente una array 2D en C?

Puntero doble: un puntero que apunta a otro puntero se conoce como puntero doble. Para representar el doble puntero se utiliza ‘ ** ‘. El puntero doble también se denomina puntero a puntero.

Ejemplo:

Input: Geeks, Gfg,  Placement, Sudo, Gate
Output: Gate, Geeks, Gfg, Placement, Sudo

La idea es asignar dinámicamente memoria y valores a las strings en forma de array 2-D. A continuación, aplique la ordenación por burbuja utilizando las funciones strcmp y strcpy .

A continuación se muestra la implementación requerida:

// C program to sort an array of strings
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
  
// Function to sort the values
void sort(char** names, int n)
{
    int i, j;
  
    // Perform sort operation using bubble sort
    for (i = 0; i < n - 1; i++)
        for (j = 0; j < n - i - 1; j++)
            if (strcmp(names[j], names[j + 1]) > 0) {
                char* temp;
                temp = (char*)calloc(30, sizeof(char));
                strcpy(temp, names[j]);
                strcpy(names[j], names[j + 1]);
                strcpy(names[j + 1], temp);
            }
}
  
// Driver code
int main()
{
    char** names;
    int n, i;
    printf("Enter the number of names to be printed: ");
    scanf("%d\n", &n);
  
    // allocating memory for 1st dimension
    names = (char**)calloc(n, sizeof(char*));
  
    for (i = 0; i < n; i++)
    // allocating memory for 2nd dimension
    {
        names[i] = (char*)calloc(30, sizeof(char));
        scanf("%s", names[i]);
    }
    sort(names, n);
  
    printf("\nArray after sorting:\n");
    for (i = 0; i < n; i++)
        printf("%s\n", names[i]);
  
    return 0;
}

Producción:

Publicación traducida automáticamente

Artículo escrito por sripriya2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *