Cifrado de cesar en [C] [?]

Iniciado por katy09811, 19 Julio 2015, 01:27 AM

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

katy09811

disculpen tengo un problema en c ya que que tengo q hacer que un programa m de el cifrado de cesar tengo esto pero no m sale la frac cifrada alguien que m ayude por fa,gracias
Código (cpp) [Seleccionar]
#include<stdio.h>
#define LONG_MAX 30
void mayuscula(char *fraseOriginal_prt);
int cifrar(char *fraseOriginal_ptr,char *fraseConvertida_ptr,int clave);
int main(){
   char fraseOriginal[LONG_MAX];
   char fraseConvertida[LONG_MAX];
   int clave,opcion;
   printf("Cifrado de cesar");
   printf("\nCadena original:");
   fgets(fraseOriginal,LONG_MAX,stdin);
   mayuscula(fraseOriginal);//En este caso la misma cadena de entrada guardara los valores convertidos a mayuscula.
   printf("Ingrese clave:");
   scanf("%d", &clave);
   printf("Digite 1 para cifrar o 2 para descifrar:");
   scanf("%d",&opcion);
   printf("\nCadena mayuscula:%s",fraseOriginal);
   if(opcion == 1){
       cifrar(fraseOriginal,fraseConvertida,clave);
       printf("Cadena cifrada:%s",fraseConvertida);
 //  }else if(opcion == 2){
 //      descifrar(fraseOriginal,fraseConvertida,clave);
 //      printf("Cadena descifrada:%s",fraseConvertida);
   }else{
       printf("OPCION NO RECONOCIDA");
   }
   return 0;
}

void mayuscula(char *fraseOriginal_ptr){
while(*fraseOriginal_ptr){
   if(*fraseOriginal_ptr>='a' && *fraseOriginal_ptr<='z'){
       *fraseOriginal_ptr = *fraseOriginal_ptr-32;
   }
   fraseOriginal_ptr++;
}
return ;
}

int cifrar(char *fraseOriginal_ptr,char *fraseConvertida_ptr,int clave){
while(*fraseOriginal_ptr){
   if(*fraseOriginal_ptr>='a' && *fraseOriginal_ptr<='z'){
       *fraseOriginal_ptr = *fraseConvertida_ptr+clave;
   }
   fraseOriginal_ptr++;
}
while(*fraseConvertida_ptr){
   if(*fraseConvertida_ptr>='a' && *fraseConvertida_ptr<='z'){
       *fraseConvertida_ptr = *fraseConvertida_ptr-32;
   }
   fraseConvertida_ptr++;
}
return fraseConvertida_ptr;

}


Mos: los códigos debeniren etiquetas GeSHi

crack81

Mira este codigo a ver si te sirve

void cifrar(char cadena[],int clave,int size){
  int i;
  for(i=0;i<size;i++){
cadena[i]=(char)((int)cadena[i]+clave);
  }
}

void descifrar(char cadena[],int clave,int size){
  int i;
  for(i=0;i<size;i++){
cadena[i]=(char)((int)cadena[i]-clave);
  }
}




int main()
{
char cadena[]="hola mundo";
int size=strlen(cadena);
cifrar(cadena,13,size);
printf("cadena cifrada: %s",cadena);
descifrar(cadena,13,size);
printf("\ncadena descifrada: %s",cadena);

getch();
return 0;
}
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

engel lex

#2
La función cifrar retorna un valor, sin embargo en la linea 19 no se lo asignas a nadie

crack81 tu codigo veo que tiene un error, si colocas letras minúsculas, te colocará caracteres problematicos o no imprimibles
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

ivancea96

#3
Recordad que si la letra + la clave acaba mayor que 'z' o de 'Z', hay que restarle.

void cesar(char* str, int key){
   for(; *str; str++)
       if(*str>='a' && *str<='z')
           *str = (*str+key-'a')%('z'-'a'+1)+'a';
       else if(*str>='A' && *str<='Z'){
           *str = (*str+key-'A')%('Z'-'A'+1)+'A';
       }
}

void decryptCesar(char* str, int key){
    cesar(str, 'z'-'a'-key+1);
}