Jueves 14 de Noviembre de 2024, 23:14
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Strings
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Strings (Leído 3209 veces)
franc
Miembro MUY activo
Mensajes: 157
Strings
«
en:
Martes 13 de Enero de 2004, 20:49 »
0
¿ 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 !
Tweet
plaf
Miembro activo
Mensajes: 57
Re: Strings
«
Respuesta #1 en:
Martes 13 de Enero de 2004, 22:35 »
0
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
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
Miembro MUY activo
Mensajes: 157
Re: Strings
«
Respuesta #2 en:
Martes 13 de Enero de 2004, 22:44 »
0
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
Nuevo Miembro
Mensajes: 9
Re: Strings
«
Respuesta #3 en:
Miércoles 14 de Enero de 2004, 01:47 »
0
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
Miembro activo
Mensajes: 57
Re: Strings
«
Respuesta #4 en:
Miércoles 14 de Enero de 2004, 03:19 »
0
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
carmamezo
Miembro MUY activo
Mensajes: 232
Re: Strings
«
Respuesta #5 en:
Viernes 16 de Enero de 2004, 17:26 »
0
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
No hay tonto más molesto que el ingenioso.
plaf
Miembro activo
Mensajes: 57
Re: Strings
«
Respuesta #6 en:
Viernes 16 de Enero de 2004, 20:46 »
0
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
Miembro MUY activo
Mensajes: 232
Re: Strings
«
Respuesta #7 en:
Domingo 18 de Enero de 2004, 00:09 »
0
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
Un saludo.
No hay tonto más molesto que el ingenioso.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Strings