| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
no_c_como
Registrado: 27 Oct 2007 Mensajes: 5
| Publicado: 16/11/2007 11:03 am | | | Título: Ordenar un vector que contiene cadena de caracteres |
| Hola necesito ordenar 2 vectores que contienen caracteres (logico que de manera alfabetica), pero sencillamente el programa no hace nada. El programa lee las cadenas de 2 archivos de textos. Aqui está el codigo:
#include<conio.h> #include<stdio.h> #include<ctype.h> #include<string.h> FILE *ptr1; FILE *ptr2; char lisnovio[80]; char lisnovia[20]; char lisfinal[20];
void ordena(char tkd1[20], char tkd2[20]) { int i,j,k,l; char aux; char a; i=0; printf("\n"); printf("Long Novio %d ", strlen(tkd1)); printf("\n"); for(i=0; i<=strlen(tkd1)-1; i++) { for(j==1; j<=strlen(tkd1)-1; j++) { a=' '; aux=' '; if(tkd1[j]>tkd1[j+1]) { aux=tkd1[j]; a=tkd1[j+1]; printf("%c es mayor que %c \n", tkd1[j], tkd1[j+1]); tkd1[j]=a; tkd1[j+1]=aux; printf(" Ahora %c es menor que %c \n", tkd1[j], tkd1[j+1]); } } } i=0; printf("Mostrando Vector Novio...\n"); for(i=0; i<=strlen(tkd1); i++) printf(" %d %c \n", i, tkd1[i]);
getch(); }
main() { ptr1=fopen("delnovio.txt", "r+"); if(ptr1==NULL) { printf("No se consiguio la lista de invitados del novio..."); getch(); } else { fgets(lisnovio, 20, ptr1); fclose(ptr1); } ptr2=fopen("lanovia.txt", "r+"); if(ptr1==NULL) { printf("No se consiguio la lista de invitados de la novia..."); getch(); } else { fgets(lisnovia, 20, ptr2); fclose(ptr2); } /* printf("Del novio : %s", lisnovio); printf("\n"); printf("\nDe la novia : %s", lisnovia); printf("\n"); */
ordena(lisnovio,lisnovia) ;
}
Está incompleto porque he comenzado a revisar de nuevo y borré algunas lineas.
Gracias. _________________ Me gusta C, quiero aprenderlo... pero como me ha costado.! |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3770 Ubicación: Mexico
| Publicado: 17/11/2007 4:29 pm | | | Título: |
| El programa tenia algunos errores en el algoritmo de ordenacion BubbleSort o Burbuja, si quieres revisar los programas de otros implementando el mismo algoritmo solo tienes que utilizar el motor de busqueda de los foros para buscar los terminos "Burbuja OR BubbleSort".
El programa modificado (C estandar):
| Código: | #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>
void ordena(char tkd1[20]);
int main(void) { FILE *ptr1; char lisnovio[80]; ptr1 = fopen("delnovio.txt", "r+"); if (ptr1 == NULL) { printf("No se consiguio la lista de invitados del novio..."); } else { fgets(lisnovio, 20, ptr1); fclose(ptr1); } printf("Original: %s\n", lisnovio); ordena(lisnovio); printf("Ordenada: %s\n", lisnovio); system("pause"); return EXIT_SUCCESS; }
void ordena(char cadena[20]) { int i, j; char aux; for (i = 0; i < (signed) strlen(cadena) - 1; i++) for (j = 0; j < (signed) strlen(cadena) - 1 - i; j++) if (cadena[j] > cadena[j + 1]){ aux = cadena[j]; cadena[j] = cadena[j + 1]; cadena[j + 1] = aux; } } |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | no_c_como
Registrado: 27 Oct 2007 Mensajes: 5
| Publicado: 17/11/2007 5:20 pm | | | Título: Excelente |
| Ya ví mi error, muchas gracias. _________________ Me gusta C, quiero aprenderlo... pero como me ha costado.! |
| | Volver arriba | |  | | david_celta
Registrado: 02 Jun 2005 Mensajes: 95
| Publicado: 17/11/2007 5:22 pm | | | Título: |
| Me parece que hay un problema en el planteamiento del problema
¿Quieres ordenar los caracteres de una cadena? Respuesta anterior
¿Quieres ordenar una cadena en base a otra cadena de igual longitud? Segun veo tu codigo intenta esto aunque no precisamente haciendo una burbuja correcta dado que usa [j] y [j+1] en ves de [i] y [j] para la comparacion
¿Quieres ordenar un arreglo de cadenas? En este caso podrias usar strcmp(cad1,cad2)>0 para determinar si cad1 es mayor que cad alfabeticamente y colocarlas asi en el lugar adecuado. Pero si es esto lo que intentas, la forma de obtener los datos del archivo estaria mal porque deberias de ponerlos en un array de cadenas y no en una sola cadena como lo estas haciendo, tendrias que hacer un bucle para leer cada cadena(asumo, la cadena representa el nombre del invitado del novio o la novia)
a[20][20];// array de 20 cadenas, cada una de 20 caracteres
| Código: | for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) if(strcmp(a[i],a[j])>0) { char tmp[20]; strcpy(tmp,a[i]); strcpy(a[i],a[j]); strcpy(a[j],tmp); }
|
Y si no es ninguna de las tres, entonces habrá que especificar con más detalle cual es el verdadero planteamiento del problema _________________ Rueda y rueda la vida, rueda y rueda el balón... y detras de la esperanza, palpita cada corazón. |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |