Como cifrar letra por letra en C++

Iniciado por Royca3, 10 Junio 2013, 06:31 AM

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

CCross

#20
Cita de: Royca3 en 11 Junio 2013, 00:00 AM
Bueno Alguien que me explique algo  :(
El código de leosansan pero necesito que en lugar de ese método lo cambie por este:
A = X
B = J
C = O
D = P
.....................

Creo que seria mas o menos asi:

Código (cpp) [Seleccionar]
#include<stdio.h>

int main()
{
   char caracter[2][28] = { {"ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"},
                            {"XJOPZWAUÑLDQSFRBMVHKNYTIEGC"} };
   char cadena[30] = {0};
   int i, j = 0, k = 0;

   printf("Ingrese una cadena en Mayuscula: ");
   scanf("%s", cadena);

      for (; cadena[k]!='\0'; k++){
          for (i = 0; i < 27; i++)
              if (cadena[j] == caracter[0][i]){
                  cadena[j] = caracter[1][i];
                  j++;
            }
      }
    printf("\n%s", cadena);

    return 0;
}


Saludos  ::)

Royca3

Osea que? No se puede? o que debo hacer?
:-X
Homo erectus

amchacon

Cita de: Royca3 en 11 Junio 2013, 01:13 AM
Osea que? No se puede? o que debo hacer?
:-X
El método de Ccros funciona  ;)
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Royca3

Bueno compilo el código y tiene cero errores  ;-)
Pero a lo que lo ejecuto e ingreso la palabra a cifrar
se sale automáticamente, luego ingreso nuevamente y me aparecen los resultados pero solo cambia la primer letra las demás las deja iguales.
 
Saludos.
Homo erectus

CCross

Cita de: Royca3 en 11 Junio 2013, 01:37 AM
Bueno compilo el código y tiene cero errores  ;-)
Pero a lo que lo ejecuto e ingreso la palabra a cifrar
se sale automáticamente, luego ingreso nuevamente y me aparecen los resultados pero solo cambia la primer letra las demás las deja iguales.

He editado el codigo de arriba ahora hace los que deseas

Saludos  ;D

Royca3

Cita de: CCross en 11 Junio 2013, 01:52 AM
He editado el codigo de arriba ahora hace los que deseas

Saludos  ;D

Bueno mi amgo :D Gracias por tu interes...

Ahora me aprarece un error en
printf("\n%s", cadena);

     return 0;
}

Intentare compilarlo con el Dev-c++

Saludos.
Homo erectus

amchacon

Cita de: Royca3 en 11 Junio 2013, 02:30 AM
Bueno mi amgo :D Gracias por tu interes...

Ahora me aprarece un error en
printf("\n%s", cadena);

     return 0;
}

Intentare compilarlo con el Dev-c++

Saludos.
Es la línea 18 y es porque falta un punto y coma.

Te falta soltura en el lenguaje, yo te recomiendo que te lo mires entero.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

rir3760

#27
En el cifrado de Cesar para encontrar los sustitutos puedes utilizar el operador de modulo (ya hay ejemplos) o bien se pueden colocar todos los caracteres en un array, con ello la operación termina como una suma (o resta si la operación es descifrar).

Por ejemplo:
#include <stdio.h>
#include <stdlib.h>

#define ABC  "abcdefghijklmnopqrstuvwxyz"

int main(void)
{
   char ch[] = ABC  ABC;
   size_t max_despl = sizeof(ABC) - 1;
   unsigned despl;
   unsigned i;
   
   printf("Desplazamiento: ");
   fflush(stdout);
   if (scanf("%u", &despl) != 1 || despl > max_despl)
      return EXIT_FAILURE;
   
   for (i = 0; i < max_despl; i++)
      printf("%c ==> %c\n", ch[i], ch[i + despl]);
   
   return EXIT_SUCCESS;
}


----

Cita de: Royca3 en 10 Junio 2013, 23:13 PMLo que yo necesito es un programa que pida una palabra o frase y que cambie las letras ejemplo A por H b por X y asi entiendes?
Para eso debes colocar todos los caracteres a buscar en un array y sus sustituciones en otro, mas o menos así:
char  in[] = "Ab";
char out[] = "HX";

Buscas cada carácter en el array "in" para conocer su indice, una vez lo obtienes (el indice, claro) lo sustituyes por el carácter correspondiente (mismo indice) del array "out".

La solución ya la tienes en el programa de CCross, una opción ligeramente distinta es utilizando la función strchr para realizar la búsqueda:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
   char  in[] = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
   char out[] = "XJOPZWAUÑLDQSFRBMVHKNYTIEGC";
   char cadena[30];
   char *p;
   int i;
   int j;
   
   printf("Ingrese una cadena en Mayuscula: ");
   fflush(stdout);
   if (scanf("%s", cadena) != 1)
      return EXIT_FAILURE;
   
   for (i = 0; cadena[i] != '\0'; i++){
      p = strchr(in, cadena[i]);
      putchar(p == NULL ? cadena[i] : out[p - in]);
   }
   putchar('\n');
   
   return EXIT_SUCCESS;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

CCross

#28
Disculpa por el detallito lo que causa codedear a prisas, ya lo correji

Saludos  ;-)

Royca3

rir3760 Muchas gracias el código es lo que buscaba pero obtengo el mismo error anterior el programa se me cierra antes de mostrar los resultados  :-( alguien sabe el porque?

(Gracias a TODOS)

Saludos.
Homo erectus