Programación General > C/C++
Strings
franc:
¿ Alguien podria decirme porque no funciona este codigo ?
Se supone que el programa coge 5 palabras introducidas por el usuario y las ordena de mayor a menor ( por orden de numero de letras ).
--- Código: Text ---#include <stdio.h>#include <conio.h>#include <string.h>#define n 5 void main(){ char *palabras[n], *aux;int i,j; for(i=0;i<=n-1;i++){ printf("Introduce la palabra Nº%d: ",i+1);scanf("%s",palabras[i]); } for( i=0; i<n-1; i++ ) for( j=0; j<n; j++ ) if (strcmp(palabras[i], palabras[j])>0) { aux = palabras[i]; palabras[i] = palabras[j]; palabras[j] = aux; } printf( "Lista ordenada:\n" ); for( i=0; i<n; i++ ) printf( " %s.\n", palabras[i] );}
Muchas gracias !
plaf:
xq palabras es un puntero apuntando a cualquier parte, tienes q reservarle memoria antes del scanf() o si no estaras tratando de escribir en lugares posiblemente prohibidos
y pues es raro tu sistema xq ordenas todo varias veces, seria mas eficiente intercambiar la p x p[j] cuando p<p[j] y despues partir revisando desde donde estas en adelante... pero lo tuyo tb funciona, eso si q con i<n o i<=n-1, no i<n-1 :P
--- Código: Text --- #include <stdio.h>#include <stdlib.h>#define n 5 int main(){ char *palabras[n], *aux; int i,j; for(i=0;i<n;i++) { printf("Introduce la palabra Nº%d: ",i+1); palabras[i] = (char *) malloc(23); scanf("%s",palabras[i]); } for( i=0; i<n; i++ ) for( j=i; j<n; j++ ) if (strcmp(palabras[i], palabras[j])<0) { aux = palabras[i]; palabras[i] = palabras[j]; palabras[j] = aux; } printf( "Lista ordenada:\n" ); for( i=0; i<n; i++ ) printf( " %s.\n", palabras[i] );}
franc:
oye pero me acavo de dar cuenta que de la forma que he planteado el programa no resuelve el problema.
La idea es que ordene de mayor a menor las palabras.
Es decir: autobus > cuatro > tres > por > tu > b
de la forma que esta planteado ordena por orden de la "primera" letra.
Hay una funcion para que comprube letra por letra ?
Gracias
GhostGirl:
Hola!!!
La función que estás usando strcmp() también funciona con cadenas de caracteres, no sólo compara letras.
Prueba usándola con la cadena entera ;)
Saludos
--
plaf:
autobus > cuatro > tres > por > tu > b
o sea q ordene solo segun el largo? entonces usa
if(strlen(palabra) > strlen(palabra[j]))
eso si quieres ordenar SOLO por el largo, si ademas quieres ordenar alfabeticamente entonces primero ordenas por largo, y despues con el mismo sistema q antes alfabeticamente, pero solo cambiando si tambien son del mismo largo
Navegación
[#] Página Siguiente
Ir a la versión completa