Programación General > C/C++
Strings
carmamezo:
PLAF: sigues cometiendo el mismo error que habeis cometido todos excepto Ghostgirl.
Para comprobar la largura de las palabras se utiliza la fución int strlen(char *) de la librería string.h. Como vereis recibe un apuntador a char (la primera posición del string, el propio nombre del string al fin y al cabo).
Como ejemplo os pongo lo siguiente:
--- Código: Text ---char a={"hola"};int longitud; longitud=strlen(a); //devuelve un 4 (h-o-l-a) longitud=strlen(a[1]); //devuelve 3 (o-l-a)longitud=strlen(a[3]); //devuelve 1 (a) Si lo que se busca es ordenar en orden alfabético la cosa puede complicarse un montón, de verdad... Habría que ir mirando letra a letra cada palabra y comparla con el resto, si hay dos palabras que empiezan igual habría que comparar sus dos segundas letras... Un lio. También se puede utilizar la función strcmp(char *) que compara cadena de caracteres, CADENAS ENTERAS, igual que antes habrá que pasarle la primera posición del string.
Creo que hay una serie de algoritmos que permiten la ordenación alfabética de una manera mecánica... Creo que uno es el método de la burbuja, el método quick short...
Pero ya os adelanto que la tarea es complicada.
Un saludo
plaf:
carmamezo, no compliques las cosas, y fijate bien en el codigo y explicacion q pusieron. cuando dice "palabra" eso es un puntero a un string completo, o bueno, al primer caracter. palabra es un arreglo de n punteros. y lo q piden aca es ordenar las palabras por su largo, asi q con el codigo q puse al principio pero cambiando el strcmp() por los strlen() como puse en el otro mensaje esta bien. y lo que dices del "lio" q hay q hacer para comparar 2 strings es justamente lo q hace strcmp()
--- Código: Text --- #include <stdio.h>#include <stdlib.h>#include <string.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 (strlen(palabras[i]) < strlen(palabras[j])) { aux = palabras[i]; palabras[i] = palabras[j]; palabras[j] = aux; } for( i=0; i<n; i++ ) for( j=i; j<n; j++ ) if (strcmp(palabras[i], palabras[j])>0 && strlen(palabras[i])==strlen(palabras[j])) { 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] );} esto las deja de mayor a menor largo y las q tengan el mismo largo quedan en orden alfabetico
autobus > cuatro > ocho > tres > dos > por > tu > a > b > z
carmamezo:
El lio no es la comparación, ya mencioné que se puede usar la función strcmp, lo complicado es la ordenación en si. Imagina que en vez de mostrarlos debieras recoger 100 strings de un fichero, ordenarlos y volver a guardarlos ordenados, sin el manejo de listas, pilas y colas la cosa es complicada, la verdad, incluso con manejo de listas es complicado.
PLAF Tienes razón, no leí el código con la suficiente atención SORRY :whistling:
Un saludo.
Navegación
[*] Página Anterior
Ir a la versión completa