Advertisement
Darksider3

Untitled

May 12th, 2014
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.67 KB | None | 0 0
  1. /*
  2.  * caesar-atbasch.cpp
  3.  *
  4.  * Copyright 2014 Leon Giesenkämper <leon@darksider3.de>
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 3 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  19.  * MA 02110-1301, USA.
  20.  *
  21.  *
  22.  */
  23.  
  24. /* CAE_ATB.h */
  25. #ifndef CAE_ATB_H
  26. #define CAE_ATB_H
  27. #include <iostream>
  28. #include <cstdio>
  29. #include "darkstring.cpp"
  30. class caesar
  31. {
  32.   private:
  33.     char *decodedString;
  34.     int length;
  35.     bool encoded;
  36.     darkstring *io;
  37.   public:
  38.     char *encodedString;
  39.     char *encode(const int move);
  40.     char *decode(const int move);
  41.     darkstring dencode(const int move);
  42.     darkstring ddecode(const int move);
  43.  
  44.     caesar(char const *str)
  45.     {
  46.       io=new darkstring(str);
  47.       //encodedString=nullptr;
  48.       encoded=false;
  49.       int i=0;
  50.       length=mystrlen(str);
  51.       decodedString=new char[length];
  52.       encodedString=new char[length];
  53.       while(str[i])
  54.       {
  55.         decodedString[i]=str[i];
  56.         i++;
  57.       }
  58.     }
  59.     void copy_decode()
  60.     {
  61.       int i=0;
  62.       if(!encoded)
  63.         copy_encode();
  64.         while(i < length)
  65.       {
  66.         decodedString[i]=encodedString[i];
  67.         i++;
  68.       }
  69.     }
  70.     void copy_encode()
  71.     {
  72.       int i=0;
  73.       encoded=true;
  74.       while(i < length)
  75.       {
  76.         encodedString[i]=decodedString[i];
  77.         i++;
  78.       }
  79.     }
  80.     ~caesar()
  81.     {
  82.       delete[](decodedString);
  83.       delete[](encodedString);
  84.     }
  85. };
  86. //######################ENCODING#######################################
  87. char *caesar::encode(const int move)
  88. {
  89.   copy_encode();
  90.   int i=0;
  91.   while(i < length)
  92.   {
  93.     //Buchstabe?!
  94.     if(move==0)
  95.       return encodedString;
  96.     if(isalpha(encodedString[i]))
  97.     {
  98.       int r=move%26;
  99.       if(encodedString[i] >= 'A' && encodedString[i] <= 'Z')
  100.       {
  101.         if(encodedString[i]+r > 'Z')
  102.         {
  103.           encodedString[i]=encodedString[i]-26;
  104.         }
  105.         encodedString[i]=encodedString[i]+r;
  106.       }
  107.       else if(encodedString[i] >= 'a' && encodedString[i] <= 'z')
  108.       {
  109.         if(encodedString[i]+r > 'z')
  110.         {
  111.           encodedString[i]=encodedString[i]-26;
  112.         }
  113.         encodedString[i]=encodedString[i]+r;
  114.       }
  115.     }
  116.     i++;
  117.   }
  118.   return encodedString;
  119. }
  120. darkstring caesar::dencode(const int move)
  121. {
  122.   copy_encode();
  123.   int i=0;
  124.   while(i < length)
  125.   {
  126.     //Buchstabe?!
  127.     if(move==0)
  128.       return encodedString;
  129.     if(isalpha(encodedString[i]))
  130.     {
  131.       int r=move%26;
  132.       if(encodedString[i] >= 'A' && encodedString[i] <= 'Z')
  133.       {
  134.         if(encodedString[i]+r > 'Z')
  135.         {
  136.           encodedString[i]=encodedString[i]-26;
  137.         }
  138.         encodedString[i]=encodedString[i]+r;
  139.       }
  140.       else if(encodedString[i] >= 'a' && encodedString[i] <= 'z')
  141.       {
  142.         if(encodedString[i]+r > 'z')
  143.         {
  144.           encodedString[i]=encodedString[i]-26;
  145.         }
  146.         encodedString[i]=encodedString[i]+r;
  147.       }
  148.     }
  149.     i++;
  150.   }
  151.   return darkstring(encodedString);
  152. }
  153. //###################################DECODING###########################
  154. char *caesar::decode(const int move)
  155. {
  156.   copy_decode();
  157.   int i=0;
  158.   while(i < length)
  159.   {
  160.     if(isalpha(decodedString[i]))
  161.     {
  162.       int r=move%26;
  163.       if(decodedString[i] >= 'A' && decodedString[i] <= 'Z')
  164.       {
  165.         if(decodedString[i]-r < 'A')
  166.         {
  167.           decodedString[i]=decodedString[i]+26;
  168.         }
  169.         decodedString[i]=decodedString[i]-r;
  170.       }
  171.       else if(decodedString[i] >= 'a' && decodedString[i] <= 'z')
  172.       {
  173.         if(decodedString[i]-r < 'a')
  174.         {
  175.           decodedString[i]=decodedString[i]+26;
  176.         }
  177.         decodedString[i]=decodedString[i]-r;
  178.       }
  179.     }
  180.     i++;
  181.   }
  182.   return decodedString;
  183. }
  184.  
  185. darkstring caesar::ddecode(const int move)
  186. {
  187.   copy_decode();
  188.   int i=0;
  189.   while(i < length)
  190.   {
  191.     if(isalpha(decodedString[i]))
  192.     {
  193.       int r=move%26;
  194.       if(decodedString[i] >= 'A' && decodedString[i] <= 'Z')
  195.       {
  196.         if(decodedString[i]-r < 'A')
  197.         {
  198.           decodedString[i]=decodedString[i]+26;
  199.         }
  200.         decodedString[i]=decodedString[i]-r;
  201.       }
  202.       else if(decodedString[i] >= 'a' && decodedString[i] <= 'z')
  203.       {
  204.         if(decodedString[i]-r < 'a')
  205.         {
  206.           decodedString[i]=decodedString[i]+26;
  207.         }
  208.         decodedString[i]=decodedString[i]-r;
  209.       }
  210.     }
  211.     i++;
  212.   }
  213.   return darkstring(decodedString);
  214. }
  215. /*####################################################################*/
  216.  class atbash
  217. {
  218.   private:
  219.     char *startString;
  220.     char *encodedString;
  221.     int length;
  222.   public:
  223.     atbash(char const *sString)
  224.     {
  225.       int i=0;
  226.       length=mystrlen(sString);
  227.       startString=new char[length];
  228.       encodedString=new char[length];
  229.       while(i < length)
  230.       {
  231.         startString[i]=sString[i];
  232.         i++;
  233.       }
  234.     }
  235.     char *encode()
  236.     {
  237.       int i=0;
  238.       int upperCache='A'+'Z';
  239.       int lowerCache='a'+'z';
  240.       while(i < length)
  241.       {
  242.         if(isalpha(startString[i]))
  243.         {
  244.           if(startString[i] >= 'A' && startString[i] <= 'Z')
  245.           {
  246.             encodedString[i]=upperCache-startString[i];
  247.           }
  248.           if(startString[i] >= 'a' && startString[i] <= 'z')
  249.           {
  250.             encodedString[i]=lowerCache-startString[i];
  251.           }
  252.         }
  253.         else
  254.         {//if the char isnt a letter, copy it without change
  255.           encodedString[i]=startString[i];
  256.         }
  257.         i++;
  258.       }
  259.       return encodedString;
  260.     }
  261.     char *decode()
  262.     {
  263.       return encode();
  264.     }
  265.  
  266.     ~atbash()
  267.     {
  268.       delete(encodedString);
  269.       delete(startString);
  270.     }
  271. };
  272. #endif /* CAE_ATB.h */
  273. bool Test_CAE(int trys, const bool debug=true, const bool full=true)
  274. {
  275.   int i=0, size=20;
  276.   char Testchars[20]="Hallo Leon";
  277.   int results[trys];
  278.   while(i < trys)
  279.   {
  280.     caesar Test1(Testchars);
  281.     /* Debugging true?*/
  282.     if(debug)
  283.     {
  284.       Test1.encode(i);
  285.       int y=0;
  286.       char *debugres=Test1.decode(i);
  287.       while(y < size)
  288.       {
  289.         if(debugres[y]==Testchars[y])
  290.         {
  291.           results[y]=true;
  292.         }
  293.         else
  294.         {
  295.           results[y]=false;
  296.         }
  297.  
  298.         y++;
  299.       }
  300.       y=0;
  301.       while(y < size)
  302.       {
  303.         if(results[y])
  304.           return true;
  305.         else
  306.           return false;
  307.       }
  308.     }
  309.     else
  310.     {
  311.       /*Debugging false*/
  312.       std::cout << "#############Count: "<< i << "########################" << std::endl;
  313.       std::cout << "Encoded: " <<Test1.encode(i)<<std::endl;
  314.       std::cout <<  std::endl <<Test1.decode(i) <<std::endl;
  315.     }
  316.     if(full)
  317.     {
  318.       caesar text("Ibmmp Mfpo");
  319.       char *debugres=text.decode(1);
  320.       if(debugres=="Hallo Leon")
  321.       {
  322.         return true;
  323.       }
  324.     }
  325.     i++;
  326.   }
  327.   return true;
  328. }
  329.  
  330.  
  331. int main(int argc, char **argv)
  332. {
  333.   /*if(Test_CAE(26, true,true)==true)
  334.     std::cout << "Successfully!\n";*/
  335.   caesar bbl("haha");
  336.   //std::cout << Test.encode() << std::endl;
  337.   std::cout <<bbl.dencode(5);
  338.   std::cout <<bbl.ddecode(5);
  339. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement