fork(2) download
  1. #include <stdio.h>
  2. #define is_upper(c) ((c) >= 'A' && (c) <= 'Z')
  3. #define is_lower(c) ((c) >= 'a' && (c) <= 'z')
  4. char* cesar_code(int k, char* s);
  5. char* cesar_decode(int k, char* s);
  6.  
  7.  
  8. int main(void){
  9. char s[] = "ABCDEF Hello World !!! END zero (XYZ)";
  10. int k = 15;
  11.  
  12. printf("source str: %s\n", s);
  13. printf("coder str: %s\n", cesar_code(k, s) );
  14. printf("decode str: %s\n", cesar_decode(k, s) );
  15. return 0;
  16. }
  17.  
  18. //шифратор
  19. char* cesar_code(int k, char* s){
  20. int i;
  21. char* t = s;
  22.  
  23. k %= 26;
  24. if(k < 0)
  25. k = -k;
  26.  
  27. for(; *s; ++s){
  28. if(is_lower(*s)){
  29. i = (*s - 'a' + k) % 26;
  30. *s = 'a' + i;
  31. } else if(is_upper(*s)){
  32. i = (*s - 'A' + k) % 26;
  33. *s = 'A' + i;
  34. }
  35. }
  36. return t;
  37. }
  38.  
  39. //дешифратор
  40. char* cesar_decode(int k, char* s){
  41. int i;
  42. char* t = s;
  43.  
  44. k %= 26;
  45. if(k < 0)
  46. k = -k;
  47.  
  48. for(; *s; ++s){
  49. if(is_lower(*s)){
  50. i = *s - 'a' - k;
  51. if(i < 0)
  52. i += 26;
  53. *s = 'a' + i;
  54. } else if(is_upper(*s)){
  55. i = *s - 'A' - k;
  56. if(i < 0)
  57. i += 26;
  58. *s = 'A' + i;
  59. }
  60. }
  61. return t;
  62. }
  63.  
Success #stdin #stdout 0s 2156KB
stdin
Standard input is empty
stdout
source str: ABCDEF Hello World !!! END zero (XYZ)
coder  str: PQRSTU Wtaad Ldgas !!! TCS otgd (MNO)
decode str: ABCDEF Hello World !!! END zero (XYZ)