Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con cadena

Estas en el tema de Problema con cadena en el foro de C/C++ en Foros del Web. HOla de nuevo, os traigo otro nuevo problema. NEcesito hacer un programa que al meterle una cadena de caracteres, te la devuelva encriptada con una ...
  #1 (permalink)  
Antiguo 18/08/2008, 10:59
 
Fecha de Ingreso: agosto-2008
Mensajes: 25
Antigüedad: 15 años, 9 meses
Puntos: 0
Problema con cadena

HOla de nuevo, os traigo otro nuevo problema.

NEcesito hacer un programa que al meterle una cadena de caracteres, te la devuelva encriptada con una clave.
Es decir el programa ha de pedirte que introduzcas la cadena, y que introduzcas una clave.
el programa ha de acer que cada caracter de la cadena se convierta en el caracter tantas veces desplazad a la derexa como indique la clave.

Ejemplo

introduzco "PEPE" y la clave 2.

el programa debera devolver RGRG.

No se si me e explicado.



No me realiza correctamente el programa.


El codigo es este y no se en que falla



#include<stdio.h>
#include<stdlib.h>
char* encripta (char* pcadena,int clave);
int main()
{
char* pcadena;
char cadena[99];
char* a;
int clave;
int pause;



printf("introduce la cadena a cifrar\n");

scanf("%[^\n]",cadena);
pcadena=cadena;
printf("introduce la clave\n");
scanf("%d",&clave);


a=encripta(pcadena,clave);

while (a!='\0')
{
printf(" %c ",*a);
a++;
}
scanf("%d",&pause);
return 0;
}





char* encripta (char* pcadena, int clave)
{
char a,ae;
int i;
char cadenaencriptada[99];
char* pcade;



i=0;
pcade=cadenaencriptada;


a=*pcadena;
while (a!='\0')

{
a=*pcadena;
pcadena++;
ae=(a+clave);
cadenaencriptada[i]=ae;
i++;
}



return pcade;
}




La parte en azul probe a sustituirla por esta otra, para ver en que fallaba, y aunque solo pusiera los tres primerosdigitos, sabria si estaban bien puests o no. Y efectivamente nada mas el primer digito cumplia la funcion de traspasar "clave" veces a la derexa. El rsto ponia lo que le daba la gana.

printf(" %c ",*a);
a++;
printf(" %c ",*a);
a++;
printf(" %c ",*a);
a++;


con este trozo de codigo sustituido en el azul metia la cadena "abc" y me devolvia cando le metia la clave 1 "b(simboloraro)(simboloraro)"
Es decir solo estaba bien la primera, el resto nada.


¿QUE PUEDE SER?Gracias ante todo-:D

Última edición por ALOJOMORA; 18/08/2008 a las 11:26
  #2 (permalink)  
Antiguo 18/08/2008, 11:22
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Problema con cadena

Buenas!, si se puede poner un parametro de tipo array, y el ejercicio que tienes que hacer es facil. Te pongo la funcion de encriptar de mi manera ok?

Código:
char frase_encriptada[20]; // Variable Global

char* encriptar(char cadena[20],int clave)
{
     for ( int int_ConFor01=0;cadena[int_ConFor01] != '\0';int_ConFor01++)
     {
         frase_encriptada[int_ConFor01] = cadena[int_ConFor01] + clave;
     }
       
       return frase_encriptada;
}
Esta es mi manera, si quieres te explico cada paso que hace mi funcion:

Código:
char* encriptar(char cadena[20],int clave)
Esta funcion, tiene dos parametros, una cadena con las primeras 20 posiciones, y un entero llamado clave.

Código:
for ( int int_ConFor01=0;cadena[int_ConFor01] != '\0';int_ConFor01++)
Un simple for, que cuenta hasta que cadena se encuentre un \0.

Código:
frase_encriptada[int_ConFor01] = cadena[int_ConFor01] + clave;
Aqui empieza a cambiar las letras. Supongamos que int_ConFor01 vale 1, y en ese lugar hay la letra 'o' ( de Hola ), y clave vale 1. 'o' + 1 en un tipo char ( frase_encriptada ) vale p, por que p y no a? pues, porque el valor de 'o' en ASCII, vale 111, y 111 + 1 hace 112, que 112 en un tipo char vale p, y en la posicion 1 ( int_ConFor01 ) del array de frase_encriptada vale p.

Código:
return frase_encriptada;
Simplemente, retorna la frase_encriptada.

Saludos! y espero que te haya ayudado!
  #3 (permalink)  
Antiguo 18/08/2008, 11:46
 
Fecha de Ingreso: agosto-2008
Mensajes: 25
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema con cadena

Si gracias, con array como parametro si lo entendia, pero lo que pasa me toy volviendo loco con el error ke ay en mi codigo.

ME ta dando weltas la cabeza.


MUXAS gracias por tu ayuda y un saludo.

Necesitaba saber ke error ay.
  #4 (permalink)  
Antiguo 18/08/2008, 14:42
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Problema con cadena

Mira, creo que te havias equivocado en algo...

Código:
int i = 0;

while (a[i]!='\0')
{
printf(" %c ",a[i]);
i++;
}
Me explico, aqui, los errores que tenias. En la condicion del while solo tenias, a != '\0', i lo que te referias, era, si toda la cadena sea diferente a '\0'. Con los punteros, se puede combinar con arrays y viceversa, despues en el printf, lo que hace es invocar el caracter donde en la posicion i ( en el primer caso en la posicion 0 ), despues sube a i a 1, despues hace lo mismo, hasta que se encuentre un '\0'.

Yo he provado tu funcion, pero a mi no me funciona el 100%, si quieres que te deja la mia, ya tienes el codigo:

Código:
char* encripta(char cadena[20],int clave)
{
     for ( int int_ConFor01=0;cadena[int_ConFor01] != '\0';int_ConFor01++)
     {
         frase_encriptada[int_ConFor01] = cadena[int_ConFor01] + clave;
     }
       
       return frase_encriptada; // la tienes que poner en global, para que funcione
}
Saludos! y espero que te haya ayudado!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:15.