uso = ROT(sCadena,numero de rotar) , el numero tambien puede ser negativo :P
Código: Seleccionar todo
/*
////Ceasar Snippet Coded m4rtyr\\\\
si lo usas no quitas los creditos
\\\\ indetectables.net ////
*/
#include <windows.h>
#include <stdio.h>
unsigned char * ROT(unsigned char *sCadena,int num)
{
unsigned char * sNeuvo=new unsigned char[strlen((const char *)sCadena)+1];
unsigned char u;int limit=0;
for(int i=0;i<strlen((const char *)sCadena);i++){
int tnum=num;
bool flag=false;
if(sCadena[i]>='a' && sCadena[i]<='z') {u='a';limit='z'-'a'+1;}
else if(sCadena[i]>='A' && sCadena[i]<='Z') {u='A';limit='Z'-'A'+1;}
else if(sCadena[i]>='0' && sCadena[i]<='9') {u='0';limit='9'-'0';flag=true;}
else if(sCadena[i]>=' ' && sCadena[i]<='/') {u=' ';limit='/'-' '+1;}
else if(sCadena[i]>=':' && sCadena[i]<='@') {u=':';limit='@'-':'+1;}
else if(sCadena[i]>='[' && sCadena[i]<='`') {u='[';limit='`'-'['+1;}
else if(sCadena[i]>='{' && sCadena[i]<='~') {u='{';limit='~'-'{'+1;}
else {sNeuvo[i]=sCadena[i];continue;}
if(tnum<0){////Rot numero es negativo
tnum*=-1;
if (tnum>limit)while(tnum>limit)tnum-=limit;
if(sCadena[i]-u>=tnum)sNeuvo[i]=sCadena[i]-tnum;
else sNeuvo[i]=limit-(tnum-(sCadena[i]-u))+u;
if(flag&&sCadena[i]=='0')sNeuvo[i]+=1;///////en caso el numero zero
}
else{////Rot numero es positivo
if (tnum>limit)while(tnum>limit)tnum-=limit;//si el num es mas grande que el range
int dif=(sCadena[i]-u)-(limit-tnum);
if(flag)dif-=1;
if(dif>=0)sNeuvo[i]=u+dif;
else sNeuvo[i]=sCadena[i]+tnum;
}}
sNeuvo[strlen((const char *)sCadena)]='\0';
return sNeuvo;
}
void main(){
char * str="z0egle# #vaqrgrpgnoyrf!arg";
printf("%s\n",ROT((unsigned char *)str,13));
}