<mosaic.cnfolio.com>
PROGRAM
  1. /*
  2. Input encrypt length store as an integer 
  3.    Check if encrypt length is an appropriate value
  4. Input encrypt code, store in array of characters
  5.    Check each element of array for inappropriate values
  6. Input plaintext length store as an integer
  7.    Check if plaintext length is an appropriate value
  8. Input Plaintext, store in array of characters
  9.    Check each element of array for inappropriate values
  10.       foreach letter of the plaintext array, if it matches a character in the encrypt array
  11.       THEN plaintext array letter = encrypt array pointer + 1
  12.    If array pointer = max, THEN array pointer = 0
  13.    ELSE keep the character the same
  14.  
  15.  
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <ctype.h>
  20. int main( void )
  21. {
  22. int end =0;
  23. int cyphersize;
  24. int plainsize;
  25. scanf("%d",&cyphersize);
  26. if (isalpha(cyphersize)){                            /*checks if alphanumericals have been entered*/
  27.    printf("\nPlease enter a number for your cyphersize");
  28. }                                            /*checks if number is greater than 2*/
  29. else if (cyphersize < 2){
  30.    printf("\nPlease enter a cyphersize greater than 1");
  31. }
  32. else if (cyphersize >16){                            /*checks if number is less than 16*/
  33.    printf("\nPlease enter a cyphersize less than 16");
  34. }
  35. else{
  36.    char cyphertext[cyphersize];
  37.     for (int i = 0; i <= cyphersize; i++)         /*Reads in the cypher values*/ 
  38.     {
  39.        cyphertext[i] = getchar();
  40.        printf("%c",cyphertext[i]);
  41.     }
  42.        int clet1;
  43.        int clet2;
  44.     for (int i = 0; i <= cyphersize; i++)   
  45.     {
  46.        if(isdigit(cyphertext[i])|| cyphertext[i] == ' '){         /*Checks if digits have been entered*/
  47.           printf("\nPlease only enter letters for the cypher text");
  48.           end =1;
  49.        }
  50.        else if (end ==0){
  51.           clet1 = cyphertext[i] - '0';          /*converts char to ascii number in order to compare*/
  52.              if (i == cyphersize){
  53.                 clet2   = cyphertext[1] - '0';
  54.              }
  55.             else
  56.             {
  57.                clet2 = cyphertext[i+1] - '0';
  58.             }
  59.             if (clet1 == clet2)            /*checks if two letters that are consecutive are the same*/
  60.             {
  61.                 printf("\n");
  62.                printf("the cypher cannot have consecutive letters that are the same, please enter a different cypher");
  63.               end =1;
  64.             }
  65.             else if(i == cyphersize && clet1 != clet2 && end !=1 )
  66.             {
  67.              scanf("%d",&plainsize);                              /*Reads in plain size*/
  68.              if (plainsize < 4){                                    /*Checks value entered is greater than 4*/
  69.                printf("Please enter a value greater than 4 for the plain text");
  70.              }
  71.             if (plainsize >256){                                    /*Checks value input is less than 256*/
  72.              printf("Please enter a value less than 256 for the plain text");
  73.             }
  74.             else{
  75.              char plaintext[plainsize + 1];
  76.              char newtext[plainsize + 1];
  77.              for (int i = 0; i <= plainsize; i++)   
  78.              {
  79.                 scanf("%c", &plaintext[i]);                /*Reads in the plain values*/
  80.                 printf("%c",plaintext[i]);
  81.              }
  82.            
  83.              letterswap(plaintext, cyphertext,newtext, plainsize, cyphersize)/*calls the swapping subroutine passing through the parameters*/
  84.              
  85.        
  86.           }
  87.    
  88.        }
  89.     }
  90. }
  91. }
  92. return 0;
  93. }
  94.  void letterswap(char plaintext[], char cyphertext[],char newtext[], int plainsize, int cyphersize)
  95.  {
  96.   int step =0;
  97.              int N =0;
  98.              int M =0;
  99.              int let1;
  100.              int let2;
  101.              char key, key2;
  102.              int swapped = 0;
  103.              printf("\n");
  104.              for (int i = 1; i <= plainsize; i++)   
  105.              {
  106.                 newtext[i] = plaintext[i];                  /*Replaces all values for newtext with the old values of the plaintext*/            
  107.              } 
  108.  int wrote = 0;
  109.  for (N = 1; N <= cyphersize; N++)                  /*Steps through the letters of the cypher*/
  110.              {
  111.                 step ++;
  112.                 if (N!= cyphersize){
  113.                    printf("step %d substitute %c with %c \n", step, cyphertext[N], cyphertext[N+1]);
  114.                 }
  115.                 if (N==cyphersize){
  116.                 printf("step %d substitute %c with %c \n", step, cyphertext[N], cyphertext[1]);
  117.                 }
  118.                 for (M = 1; M <= plainsize; M++)            /*steps throgh the letters of the plain text*/     
  119.                 { 
  120.                    let1 = cyphertext[N] - '0';          /*converts letters into comparable numbers*/
  121.                    let2 = plaintext[M] - '0';
  122.                    if (plaintext[M] == ' '){      /*for statement for if the letters have already been swapped*/
  123.                       if (swapped == 1){
  124.                          N++;
  125.                          step++;
  126.                          printf("step %d substitute %c with %c \n", step, cyphertext[N], cyphertext[N+1]);   
  127.                       }
  128.                    }
  129.                    else if (let1 == let2 && N != cyphersize){    /*replacement statement for if the letter is the same*/
  130.                       if (swapped == 0){
  131.                          newtext[M] = cyphertext[N+1];
  132.                          plaintext[M] = ' ';
  133.                          swapped =1;
  134.                       }   
  135.                    }
  136.                    else if (let1 == let2 && N == cyphersize){    /*replacement statement for if the letter is the same and is the last letter of the cypher*/
  137.                       if (swapped == 0){
  138.                          newtext[M] = cyphertext[1];
  139.                          plaintext[M] = cyphertext[1];
  140.                          swapped =1;
  141.                       }
  142.                    }
  143.    
  144.                    if (wrote ==0 && (swapped == 1 || (swapped == 0 && M== plainsize))){      /*print statements if no swaps occur*/
  145.                       printf("\n");
  146.                       for (int i = 1; i <= plainsize; i++)   
  147.                       {
  148.                          printf("%c",newtext[i]);             
  149.                       }
  150.                       printf("\n");     
  151.                       wrote =1;
  152.                    }
  153.                    swapped =0; /*reset*/
  154.                 }
  155.                 wrote = 0;
  156.              }
  157.  return 0;
  158.  }