Advertisement
LightningStalker

Simple Caesar cypher with negative shift support

Sep 10th, 2013
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. * Simple Caesar cypher algorithm
  3. * Preserves case and non-alpha characters
  4. * by The Lightning Stalker
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <ctype.h>
  9.  
  10. #define ALPHA 26                    // letters in alphabet
  11. #define CONVBASE -7                 // conversion base
  12. #if CONVBASE < 0
  13. #define CONVBASE_IS_NEG
  14. #endif
  15. #ifdef CONVBASE_IS_NEG
  16. #define COMPLEMENT ALPHA + CONVBASE // conversion complement
  17. #define CHARLMIN *"a" - CONVBASE    // smallest char without rollover
  18. #define CHARUMIN *"A" - CONVBASE    // . . .
  19. #else
  20. #define COMPLEMENT CONVBASE - ALPHA // conversion complement
  21. #define CHARLMIN *"z" - CONVBASE    // largest character without
  22. #define CHARUMIN *"Z" - CONVBASE    // rollover
  23. #endif
  24.  
  25. static const char stringin[] = "Joyvtl Jvbuayf";  // string to convert
  26. //~ static const char stringin[] = "Chrome Country";  // . . .
  27.  
  28. int main (int argc, char **argv)
  29. {
  30.     int c;
  31.     char stringout[256];
  32.    
  33.     for (c = 0; c < sizeof(stringin); c++)   // Take a look at each
  34.     {                                        // character, one at a time
  35.         if (isalpha(stringin[c]))            // and apply the cypher.
  36.             if (islower(stringin[c]))
  37. #ifdef CONVBASE_IS_NEG
  38.                 if (stringin[c] >= CHARLMIN)
  39. #else
  40.                 if (stringin[c] <= CHARLMIN)
  41. #endif
  42.                     stringout[c] = stringin[c] + CONVBASE;
  43.                 else
  44.                     stringout[c] = stringin[c] + COMPLEMENT;
  45.             else
  46. #ifdef CONVBASE_IS_NEG
  47.                 if (stringin[c] >= CHARUMIN)
  48. #else
  49.                 if (stringin[c] <= CHARUMIN)
  50. #endif
  51.                     stringout[c] = stringin[c] + CONVBASE;
  52.                 else
  53.                     stringout[c] = stringin[c] + COMPLEMENT;
  54.         else
  55.         stringout[c] = stringin[c];
  56.     }
  57.     printf("%s\n", stringout);
  58.     return(0);
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement