/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ordenar un vector que contiene cadena de caracteres

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
no_c_como



Registrado: 27 Oct 2007
Mensajes: 5

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com