Ver Mensaje Individual
  #4  
Antiguo 21-10-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 14
aguml Va por buen camino
Ahora he modificado el codigo un poco y sobre todo he añadido mas caracteres a la mascara de caracteres válidos y ya no funciona correctamente. Tengo esto:
Main.cpp:
Código PHP:
//---------------------------------------------------------------------------
#include <iostream>
#include "Unit1.h"
//---------------------------------------------------------------------------

int main()
{
   
string cadena "Hola Mundo, como te va.";
   
string semilla "aguml";

   
Vigenere *vig = new Vigenere;
   
string cifrada vig->cifrar(cadenasemilla);
   
std::cout << cifrada << std::endl;

   
string descifrada vig->descifrar(cifradasemilla);
   
std::cout << descifrada << std::endl;
   
delete vig;
   
std::cin.get();

   return 
0;

Unit1.cpp:
Código PHP:
/************************************************
*  Nombre : Vigenere.cpp                        *
*                                               *
*  Cifrado de cesar de sustitución multiple     *
*  por medio de sumas y restas del alfabeto     *
*                                               *
*  Fulapol                                      *
*  [email protected]                            *
*  my.opera.com/fulapol                         *
*                                               *
************************************************/

/************************************************
*                                               *
*  El Constructor que debe recibir la cadena a  *
*  tratar y la cadena semilla                   *
*                                               *
************************************************/
#include "Unit1.h"

Vigenere::Vigenere(){
   
letras "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZáéíóúÁÉÍÓÚüÜ1234567890¿?¡!,;.:-_ \"<>()=+*/&%$#@";
}

Vigenere::~Vigenere(){

}
/************************************************
*                                               *
*  El metodo cifrar, que regresa una cadena de  *
*  texto que solo despues de ser cifrada        *
*                                               *
************************************************/

string Vigenere::cifrar(string origstring sem){
   
string final;
   
int imovimientorotaciontotal;
   
size_t pospos2;
   
//Las variables serviran para registrar la posicion
   //de las letras y calcular la semilla

   
this->texto limpiar(orig);
   
this->semilla limpiar(sem);

   for(
i=0rotacion=0texto.length(); i++, rotacion++){
      
pos letras.find(texto.at(i));
      
pos2 letras.find(semilla.at(rotacion));
      
total = ((int)(pos+pos2))%letras.length();
      
//El total que marca la posicion de la letra y la
      //semilla sumadas

      
if(total letras.length())
         
movimiento total letras.length();
      else
         
movimiento total;
      
//Para asegurarnos que esta dentro del rango

      
final.append(letrasmovimiento1);
      if(
rotacion == semilla.length() - 1)
         
rotacion 0;
      
//Si se acaba la semilla, regresar al principio
   
}
   return final;
}

/************************************************
*                                               *
*  El metodo descifrar, que regresa una cadena  *
*  de texto que solo despues de ser descifrada  *
*                                               *
************************************************/

string Vigenere::descifrar(string origstring sem){
   
//La funcion es exactamente la misma que en el metodo
   //cifrar, solo que aqui las posiciones se restan para
   //eliminar la semilla del texto

   
string final;
   
int imovimientorotaciontotal;
   
size_t pospos2;

   
this->texto limpiar(orig);
   
this->semilla limpiar(sem);
   
   for(
i=0rotacion=0i<texto.length(); i++, rotacion++){
      
pos letras.find(texto.at(i));
      
pos2 letras.find(semilla.at(rotacion));
      
total = ((int)(pos pos2)) % letras.length();
      if(
total 0)
         
movimiento total letras.length();
      else
         
movimiento total;
      final.
append(letrasmovimiento1);
      if(
rotacion == semilla.length() - 1)
         
rotacion 0;
   }
   return final;
}

/************************************************
*                                               *
*  El metodo limpiar, que regresa una cadena de *
*  texto que solo contiene los caracteres       *
*  soportados por la clase                      *
*                                               *
************************************************/

string Vigenere::limpiar(string cadena){
   
int i;
   
string final;
   for(
i=0cadena.length(); i++){
      if(
letras.find(cadena.at(i)) != -1)
         final.
append(&cadena.at(i),1);
      
//Agregamos a la cadena final el caracter
      //si se encuentra en la variable letras
   
}
   return final;

Unit1.h:
Código PHP:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <cstring.h>

class Vigenere{
   private:
      
string texto,semilla,letras;
      
string limpiar(string cadena);
      
//Las variables son privadas, el metodo limpiar
      //es privada ya que solo lo utilizan los otros
      //metodos para limpiar la entrada

   
public:
      
Vigenere();
      ~
Vigenere();
      
string cifrar(string origstring sem);
      
string descifrar(string origstring sem);
      
//Esto es publico porque es la unica forma de
      //accesar a los datos de la clase
};
//---------------------------------------------------------------------------
#endif 
¿Como la pongo correctamente la máscara?
Responder Con Cita