Gracias gracias lo probaré por la noche en otros programas que tengo por ahi guardados .
Ya pobre el codigo y funcionó excelente, pero no reconoce la ñ y si pongo espacio y despues sigo escribiendo no me toma en cuenta eso, ¿alguna idea de como solucionarlo?
Y lo segundo, monte el código que me proporciono engel lex en un programa que no había terminado, un cifrado basado en rand y tomar posiciones aleatorias del alfabeto, mas o menos funciona pero no al 100 alguien me puede decir que pasa?
Posdata: El valor que tiene que regresarme en la a es 0 ya que ese es su lugar en el array. Otra cosa que esta mal es que no me imprime la ñ (que ya me lo esperaba), ni la "t" y tampoco la "y".
Ya pobre el codigo y funcionó excelente, pero no reconoce la ñ y si pongo espacio y despues sigo escribiendo no me toma en cuenta eso, ¿alguna idea de como solucionarlo?
Y lo segundo, monte el código que me proporciono engel lex en un programa que no había terminado, un cifrado basado en rand y tomar posiciones aleatorias del alfabeto, mas o menos funciona pero no al 100 alguien me puede decir que pasa?
Código [Seleccionar]
#include <iostream>
#include<cstdlib>
#include <ctype.h>
#include <locale.h>
#include<string.h>
using namespace std;
void desorden(int []);
void desordenarLet(int [], char []);
int main(){
setlocale(LC_CTYPE, "Spanish");
int random[28];
int i, numeroS, longitudmensaje;
char alfabetoDes[28];
string mensaje;
locale loc;
cout<<"Teclee su llave numerica: ";
cin>>numeroS;
srand(numeroS);
desorden(random);
desordenarLet(random, alfabetoDes);
cout<<"\nIntroduzca el mensaje a cifrar\n";
cin>>mensaje;
cin.get();
longitudmensaje=(mensaje.size());
int ordenLet[longitudmensaje];
for(i=0;i<mensaje.size();i++){
mensaje[i] = tolower(mensaje[i], loc);//a minusculas
if(mensaje[i]>='a' && mensaje[i]<='z'){
if(mensaje[i]>'n'){//para meter la ñ que no está en ascii standard
mensaje[i]++;
}
mensaje[i]-='a';
cout<<(int)mensaje[i];//para ubicarlo en el orden natural
//cout<<(int)mensaje[i];//imprimimos casteando como int
//cout<<endl;
}
if(mensaje[i]==-61){//aquí está la ñ de ascii extendido
i++;//la ñ ocupa 2 char, así que avanzamos 1 de una vez
if(mensaje[i]==-111 || mensaje[i]==-79){//aseguramos que es ñ
mensaje[i]='n'-'a';//va siguiente a la n y arreglamos su orden natural
//cout<<(int)mensaje[i];//imprimimos casteando como int
//cout<<endl;
}
}
}
char mensajeCif[mensaje.size()];
for(i=0;i<mensaje.size();i++){
mensajeCif[i]=alfabetoDes[mensaje[i]];
}
cout<<"\n";
for(i=0;i<=mensaje.size();i++){
cout<<mensajeCif[i];
}
cin.get();
return 0;
}
void desorden(int vector[28]){
int i, j, problema, n;
for(i=0;i<=27;i++){
n=rand() % 28;
problema=0;
for(j=0;j<=i;j++){
if(n==vector[j]){
problema=1;
break;
}
}
if(problema==1){
i--;
}else{
vector[i]=n;
}
}
}
void desordenarLet(int r[28], char a[28]){
a[28];
a[r[0]]='a';
a[r[1]]='b';
a[r[2]]='c';
a[r[3]]='d';
a[r[4]]='e';
a[r[5]]='f';
a[r[6]]='g';
a[r[7]]='h';
a[r[8]]='i';
a[r[9]]='j';
a[r[10]]='k';
a[r[11]]='l';
a[r[12]]='m';
a[r[13]]='n';
a[r[14]]='ñ';
a[r[15]]='o';
a[r[16]]='p';
a[r[17]]='q';
a[r[18]]='r';
a[r[19]]='s';
a[r[20]]='t';
a[r[21]]='u';
a[r[22]]='v';
a[r[23]]='w';
a[r[24]]='x';
a[r[25]]='y';
a[r[26]]='z';
a[r[27]]=' ';
}
Posdata: El valor que tiene que regresarme en la a es 0 ya que ese es su lugar en el array. Otra cosa que esta mal es que no me imprime la ñ (que ya me lo esperaba), ni la "t" y tampoco la "y".