Programación General > C/C++

 Strings

(1/2) > >>

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 &#60;stdio.h&#62;#include &#60;stdlib.h&#62;#define n 5 int main(){     char *palabras[n], *aux;    int i,j;     for(i=0;i&#60;n;i++)    {  printf(&#34;Introduce la palabra Nº%d: &#34;,i+1);  palabras[i] = (char *) malloc(23);  scanf(&#34;%s&#34;,palabras[i]);    }     for( i=0; i&#60;n; i++ )  for( j=i; j&#60;n; j++ )   if (strcmp(palabras[i], palabras[j])&#60;0)   {    aux = palabras[i];    palabras[i] = palabras[j];    palabras[j] = aux;   }     printf( &#34;Lista ordenada:&#092;n&#34; );    for( i=0; i&#60;n; i++ )    printf( &#34;  %s.&#092;n&#34;, 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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa