Mi clase principal es esta:
Código PHP:
class CCodificador{
private:
AnsiString cadena, cadena_codificada;
int comparar(int i, int j);
public:
CCodificador();
void setCadena(AnsiString cad);
void ComprimeCad();
void Decodificar(AnsiString cad);
AnsiString getCadena();
AnsiString getCadenaComprimida();
ofstream &operator << (ofstream &out){
out << cadena.c_str()<<endl;
out << cadena_codificada.c_str();
return out;
}
ifstream &operator >>(ifstream &in){
in >> cadena_codificada.c_str();
in >> cadena.c_str();
return in;
}
};
ahora ahi los he sobrecargado, lo que pasa es que no me hace lo que yo quiero que es poner la cadena normal y la cadena codificada dentro del mismo archivo de salida. Pero me da problemas y solo me saca uno solo.
Esta es la implementación de las clases.
Código PHP:
CCodificador::CCodificador(){
cadena = "";
cadena_codificada = "";
}
void CCodificador::setCadena(AnsiString cad){
cadena = cad;
cadena_codificada = "";
}
int CCodificador::comparar(int i, int j) {
int aux = 1;
while (cadena.c_str()[i+aux] == cadena.c_str()[j+aux]) aux++;
return (aux != 1)?aux:-1;
}
void CCodificador::ComprimeCad(){
TList * Lista = new TList();
for (int i = 0; i < cadena.Length()-1; i++)
for (int j = i+1; j < cadena.Length(); j++) {
int aux;
if (cadena.c_str()[i] == cadena.c_str()[j] && (aux = comparar(i,j)) > 0){
cadena.Delete(j+1,aux);
Nodo * t = new Nodo(aux,j-i,j+1);
Lista->Insert(0,t);
}
}
cadena_codificada = cadena;
int count,aux;
while (Lista->Count > 0) {
count = 1;
Nodo t(0,0,0);
t = *(Nodo *) (Lista->First());
aux = t.p;
Lista->Delete(0);
while (count <= Lista->Count){
aux += ((Nodo*)(Lista->First()))->p;
count++;
}
cadena_codificada.Insert("COPIA("+IntToStr(t.i)+","+IntToStr(aux)+")",t.z);
}
}
void CCodificador::Decodificar( AnsiString cad){
int pos = 0;
while ((pos = cad.Pos("COPIA(")) != 0) {
cad.Delete(pos,6);
int aux1 = StrToInt(cad.SubString(pos,cad.Pos(",")-pos));
cad.Delete(pos,cad.Pos(",")-pos+1);
int aux2 = StrToInt(cad.SubString(pos,cad.Pos(")")-pos));
cad.Delete(pos,cad.Pos(")")-pos+1);
cad.Insert(cad.SubString(pos-aux2,aux1),pos);
}
cadena = cad;
}
AnsiString CCodificador::getCadena(){
return cadena;
}
AnsiString CCodificador::getCadenaComprimida(){
return cadena_codificada;
}
y esta es la llamada al metodo para escribir en un fichero
Código PHP:
CCodificador Cod;
ifstream fichero;
fichero.open("result.txt", ios_base::out );
if(fichero)
Caption = "TRUE";
Cod >> fichero;
fichero.close();
me ayudan ??