fork download
  1. #include <stdio.h>
  2.  
  3. int isalphabet(char c) {
  4. return (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z'));
  5. }
  6.  
  7. char caesar(char c, int n) {
  8. if (!isalphabet(c)) return c;
  9. char base = ('A' <= c && c <= 'Z') ? 'A' : 'a';
  10. int pos = c - base;
  11. pos = (pos + n + 26) % 26;
  12. return base + pos;
  13. }
  14.  
  15. int main() {
  16. char str[100];
  17. int n;
  18.  
  19. printf("文字列を入力: ");
  20. fgets(str, sizeof(str), stdin);
  21.  
  22. printf("シフト数nを入力: ");
  23. scanf("%d", &n);
  24.  
  25. printf("暗号化結果: ");
  26. for (int i = 0; str[i] != '\0'; i++) {
  27. printf("%c", caesar(str[i], n));
  28. }
  29.  
  30. printf("\n復号結果: ");
  31. for (int i = 0; str[i] != '\0'; i++) {
  32. printf("%c", caesar(str[i], -n));
  33. }
  34.  
  35. printf("\n");
  36. return 0;
  37. }
Success #stdin #stdout 0s 5312KB
stdin
Standard input is empty
stdout
文字列を入力: シフト数nを入力: 暗号化結果: 
復号結果: