Łączenie naturalne plików C++
Mariusz:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void LeerElemDetectandoFin(fstream &arch, string &comp,bool &finArch)
{
finArch=arch.eof();
if(!finArch)
{
getline(arch,comp);
}
}
void PasarElemDetectandoFin(fstream &archOrigen,fstream &archDestino, string &comp, bool
&finArchOrigen)
{
archDestino<<comp<<endl;
LeerElemDetectandoFin(archOrigen,comp,finArchOrigen);
}
void Mezcla(string path, fstream &aux1,fstream &aux2, fstream &arch)
{
string c1,c2;
string path1,path2;
bool finArch1,finArch2;
path1=path.substr(0,path.find('.'))+"01.txt";
path2=path.substr(0,path.find('.'))+"02.txt";
aux1.open(path1.c
str(),ios::in);
aux2.open(path2.c
str(),ios::in);
arch.open(path.c
str(),ios:
ut);
LeerElemDetectandoFin(aux1,c1,finArch1);
LeerElemDetectandoFin(aux2,c2,finArch2);
while(!finArch1 && !finArch2)
{
if(c1<c2)
PasarElemDetectandoFin(aux1,arch,c1,finArch1);
else
PasarElemDetectandoFin(aux2,arch,c2,finArch2);
}
while(!finArch1)
PasarElemDetectandoFin(aux1,arch,c1,finArch1);
while(!finArch2)
PasarElemDetectandoFin(aux2,arch,c2,finArch2);
arch.close();
aux1.close();
aux2.close();
}
void Division(string path,fstream &arch,fstream &aux1, fstream &aux2, bool &esVacio2)
{
string valorActual,valorAnterior;
bool cambio;
string path1,path2;
path1=path.substr(0,path.find('.'))+"01.txt";
path2=path.substr(0,path.find('.'))+"02.txt";
arch.open(path.c
str(),ios::in);
aux1.open(path1.c
str(),ios:
ut);
aux2.open(path2.c
str(),ios:
ut);
cambio=true;
esVacio2=true;
if(!arch.eof())
{
getline(arch,valorActual);
aux1<<valorActual<<endl;
valorAnterior=valorActual;
}
while(!arch.eof())
{
getline(arch,valorActual);
if(valorAnterior>valorActual)
cambio=!cambio;
if(cambio)
aux1<<valorActual<<endl;
else
{
aux2<<valorActual<<endl;
esVacio2=false;
}
valorAnterior=valorActual;
}
arch.close();
aux1.close();
aux2.close();
}
int main()
{
string path;
fstream aux1,aux2,arch;
bool esVacio2;
getline(cin,path);
esVacio2=false;
while(!esVacio2)
{
Division(path,arch,aux1,aux2,esVacio2);
if(!esVacio2)
Mezcla(path,aux1,aux2,arch);
}
return 0;
}
Gdzie jest błąd ?
Przepisywałem z Pascala słowo w słowo
W Pascalu kod działał dobrze