Manejo de archivos txt

Iniciado por robertoesimez, 4 Abril 2017, 05:25 AM

0 Miembros y 1 Visitante están viendo este tema.

robertoesimez

Me podrian decir como podria ingresar una serie de nombres en un archivo txt y de ahi que se me ordenara segun el metodo que eliga el usuario en el menu,  esto es lo que llevo
Código (cpp) [Seleccionar]

#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define Max 100

using namespace std;
FILE *doc;

void OrdenaBur(int , char [Max][Max], char [Max]);//mis funciones
void QS(char [Max][Max],int,int);
void MShell(int , char [Max][Max]);
void Imprimir(int , char [Max][Max]);
void Guardar(int , char [Max][Max]);



int main() {
int Tam;

char arreglo[Max][Max], temp[Max], preg;
int Menu;


cout << "  Metodos de ordenamiento"<<endl;
cout << "Seleccione una opcion"<<endl;
cout <<"1.Ingresar Datos"<<endl;
    cout <<"2.Mostrar Datos"<<endl;
    cout <<"3.Metodo QuickSort"<<endl;
cout <<"4.Metodo Burbuja"<<endl;
    cout <<"5.Metodo Shell"<<endl;
    cout <<"6.Salir"<<endl;

cin >> Menu;

do{//mi menu
system("cls");

cout << "\n\n\t 1.Ingresar Datos\n 2.Mostrar Datos\n 3.Metodo QuickSort"
<< "\n 4.Metodo Burbuja\n 5.Metodo Shell\n "
<< "\n 7.Salir\n";
if(Menu=='\0')
{
cout  << "\t\tSeleccione la opcion\n";
cin >> Menu;
}
switch(Menu){

case 1:
{
cout << "Ingrese la cantidad de cadenas que desee ordenar\n";
cin >> Tam;
Tam--;
Guardar(Tam, arreglo);
break;
}
case 2:
{

cout << "\nSus cadenas ingresadas son las siguientes\n"<<endl;
Imprimir(Tam, arreglo);
break;
}
case 3:
{
QS(arreglo,0,Tam);
Imprimir(Tam,arreglo);
break;
}
case 4:
{
OrdenaBur(Tam,arreglo,temp);
Imprimir(Tam,arreglo);
break;
}
case 5:
{
MShell(Tam, arreglo);
Imprimir(Tam,arreglo);
break;
}
case 6:
{
return 0;
    break;
}

default:
cout << "Error, Debe ingresar un dato valido\n";
}
cout << "\nDesea volver al menu?"
<< "\n s para volver\n n para salir\n";
cin >>preg;
Menu='\0';
}
while(preg=='s');
return 0;
}
void OrdenaBur(int Tam, char arreglo[Max][Max], char temp[Max])
{
int tb, rg;
cout << "\n\nSus cadenas ordenadas alfabeticamente con el metodo burbuja son: \n" << endl;

for(tb=0; tb<Tam; tb++)
for(rg=tb+1; rg<Tam+1; rg++)
if(strcmpi(arreglo[tb], arreglo[rg])>0)
{
strcpy(temp, arreglo[tb]);
strcpy(arreglo[tb], arreglo[rg]);
strcpy(arreglo[rg], temp);
}
}
void QS(char arreglo[Max][Max],int limite_izq,int limite_der)
{

    int izq,der,prob;
    char temporal[Max],pivote[Max];
    cout << "\n\nSus cadenas ordenadas \n"
<< "alfabeticamente con el metodo quick sort son: \n" << endl;

    izq=limite_izq;
    der = limite_der;
    strcpy(pivote,arreglo[(izq+der)/2]);

    do
{

        while(strcmpi(arreglo[izq],pivote)<0)
izq++;
        while(strcmpi(arreglo[der],pivote)>0)
der--;
        if(strcmpi(arreglo[izq],arreglo[der])>=0)
        {
            strcpy(temporal,arreglo[izq]);
            strcpy(arreglo[izq],arreglo[der]);
strcpy(arreglo[der],temporal);
            izq++;
            der--;
        }

    }
while(izq<=der);

    if(limite_izq<der)
QS(arreglo,limite_izq,der);
    if(limite_der>izq)
QS(arreglo,izq,limite_der);
}
void MShell(int Tam, char arreglo[Max][Max])
{
int i,j,k;
char aux[Max] ;
cout << "\n\nSus cadenas ordenadas alfabeticamente con el metodo shell sort son: \n" << endl;
k=Tam/2;

while(k>0)
{
for(i=k/*+1*/;i<=Tam;i++)
{
j=i-k;
while(j>=0)
{
if(strcmp(arreglo[j],arreglo[j+k])>=0)
{
strcpy(aux,arreglo[j]);
strcpy(arreglo[j],arreglo[j+k]);
strcpy(arreglo[j+k],aux);
}
else
{
j=0;
}
j=j-k;
}
}
k=k/2;
}
}



void Guardar(int Tam, char arreglo[Max][Max])
{
int cont;
for (cont=0;cont<=Tam;cont++)
{
cout << "\nCadena "<<cont+1<<endl;
cin >> arreglo[cont];
}
}
void Imprimir(int Tam, char arreglo[Max][Max])//Mi duda con los archivos
{
    int c;
    doc= fopen("alfabetico.txt","r");
    if (doc==NULL){
    cout<<"Error con el archivo"<<endl;

     while((c=getc(doc))!=EOF){
     if(c=='\n'){
      cout<<endl;
     }
      else {
     cout<<c;
     }

     fclose(doc);

     }

    }
}





ThunderCls

1- Pues necesitas usar funciones para manipular ficheros: fopen, fgets, fputs...etc (http://www.cplusplus.com/reference/cstdio/fopen/).
2- Necesitas crearte una variable global que almacenara todo el contenido de tu fichero luego que lo leas (array, vector, list...tu eliges)
3- Luego solo llamas las funciones de ordenamiento sobre tu variable en memoria y al salir de la aplicación vuelves a guardar todo al .txt con las mismas funciones de 1
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/