La profesora de programación nos ha mandado hacer como ejercicio final a los que llevamos bien la materia hacer un programa.
El problema es que no lo se terminar...
Utilizando estas librerias y punteros, debo hacer que las cadenas se ordenen...(eso está hecho) y hacer que se ordenen en orden inverso.
Lo malo es que con orden inverso no se refiere a descendente...
sino a que se ordenen por la ultima letra de cada cadena.
Cada cadena puede tener una longitud distinta, y eso ya me supera... tengo una ligera idea pero cuando voy a escribirla me bloqueo.
He estado buscando y no he encontrado nada semejante en ningún otro lenguaje.
Si me podeis ayudar os lo agradeciría mil...
Código LO QUE ME FALTA:
Ver original
#include <stdio.h> #include <stdlib.h> #include <string.h> void ordenar (char **, int); void inversa (char **, int); void main () { char **cad, fin[4]="fin"; int i=0, n=0, cont=0, op=0; printf ("¿Cuantos nombres quieres almacenar? "); scanf ("%i",&n); cad=(char **)malloc (n*sizeof (char*)); do { i++; *(cad+i)=(char *)malloc (n*sizeof (char)); fflush (stdin); gets (*(cad+i)); cont++; }while (i<n && (strcmp((*(cad+i)),fin)!=0)); if (*(cad+i)==fin) { cont=cont-1; } else { cont++; } do{ printf ("\n---------MENU---------\n"); printf ("- 1. Ordenar -\n"); printf ("- 2. Ordenar Inverso -\n"); printf ("- 3. Salir -\n"); printf ("----------------------\n"); printf ("> Opción: \n"); scanf ("%i", &op); if (op == 1){ ordenar (cad, cont); printf ("\n"); for (i=1;i<cont;i++){ puts (*(cad+i)); } }else if (op == 2){ inversa (cad, cont); printf ("\n"); for (i=1;i<cont;i++){ puts (*(cad+i)); } } }while (op!=3); } void ordenar (char **cad, int cont) { int i, j,m, l=0; char *aux; for (i=1;i<cont;i++) { for (j=1;j<cont;j++) { l=strcmp ((*(cad+i)), (*(cad+j))); if (l<0) { aux=(*(cad+i)); *(cad+i)=*(cad+j); *(cad+j)=aux; } } } } void inversa (char **cad, int cont) { LO QUE ME FALTA }