fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define SIZE 1000 // 入力可能な最大文字数
  5.  
  6. // (a) アルファベットかどうかを判定
  7. int isalphabet(char c) {
  8. return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
  9. }
  10.  
  11. // (b) アルファベットを n 文字ずらす
  12. char caesar(char c, int n) {
  13. if (c >= 'A' && c <= 'Z') {
  14. return 'A' + ( (c - 'A' + n + 26) % 26 );
  15. } else if (c >= 'a' && c <= 'z') {
  16. return 'a' + ( (c - 'a' + n + 26) % 26 );
  17. } else {
  18. return c; // アルファベットでない文字はそのまま
  19. }
  20. }
  21.  
  22. int main() {
  23. char input[SIZE];
  24. char encrypted[SIZE];
  25. char decrypted[SIZE];
  26. int n;
  27.  
  28. // 文字列とシフト量の入力
  29. printf("暗号化したい文字列を入力してください: ");
  30. fgets(input, SIZE, stdin);
  31. input[strcspn(input, "\n")] = '\0'; // 改行文字を除去
  32.  
  33. printf("シフト量(正の整数)を入力してください: ");
  34. scanf("%d", &n);
  35.  
  36. // 暗号化処理
  37. for (int i = 0; input[i] != '\0'; i++) {
  38. encrypted[i] = caesar(input[i], n);
  39. }
  40. encrypted[strlen(input)] = '\0';
  41.  
  42. // 復号化処理(-n で元に戻す)
  43. for (int i = 0; encrypted[i] != '\0'; i++) {
  44. decrypted[i] = caesar(encrypted[i], -n);
  45. }
  46. decrypted[strlen(encrypted)] = '\0';
  47.  
  48. // 結果表示
  49. printf("暗号化された文字列: %s\n", encrypted);
  50. printf("復号化された文字列: %s\n", decrypted);
  51.  
  52. return 0;
  53. }
Success #stdin #stdout 0.01s 5288KB
stdin
Hello
5
stdout
暗号化したい文字列を入力してください: シフト量(正の整数)を入力してください: 暗号化された文字列: Mjqqt
復号化された文字列: Hello