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
#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
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;
}
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
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);
}