fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //#include <conio.h>
  4.  
  5. // プロトタイプ
  6. void EnCode( char *, int );
  7. void DeCode( char *, int );
  8.  
  9.  
  10. //****************************************************************************//
  11. // ◎メイン関数 
  12. //****************************************************************************//
  13. int main()
  14. {
  15. char *str = NULL;
  16. int shift;
  17.  
  18. //
  19. printf( "文字列を入力してください:\n" );
  20. for ( int size = 1; ; size++ ){
  21. str = (char*)realloc(str, sizeof(char)*size); // 動的サイズ変更
  22. if ( str == NULL ) exit(1); // メモリ確保失敗
  23. str[size-1] = getchar(); // 入力データ取得
  24. if ( str[size-1] == '\n' ) break; // 終了文字発見
  25. }
  26. printf( "シフト値を入力してください(1~25):\n" );
  27. scanf( "%d", &shift );
  28.  
  29. //
  30. EnCode( str, shift );
  31. printf( "暗号文 → " );
  32. for ( int loop = 0; str[loop] != '\n'; loop++ ) putchar(str[loop]);
  33. printf("\n");
  34. DeCode( str, shift );
  35. printf( "複合文 → " );
  36. for ( int loop = 0; str[loop] != '\n'; loop++ ) putchar(str[loop]);
  37.  
  38. free(str);
  39. //getch();
  40. return 0;
  41. }
  42.  
  43.  
  44. //-----------------------------------------------------------------------------//
  45. // 関数名 : EnCode()
  46. // 機能概要: 暗号化処理
  47. //-----------------------------------------------------------------------------//
  48. void EnCode( char *str, int num )
  49. {
  50. for ( ; *str != '\n'; str++ ){
  51. if ( 'A' <= *str && *str <= 'Z' ) *str = (*str-'A' + num) % 26 + 'A'; // 26 = ('Z'-'A'+1)
  52. else if ( 'a' <= *str && *str <= 'z' ) *str = (*str-'a' + num) % 26 + 'a'; // 26 = ('z'-'a'+1)
  53. else if ( ' ' <= *str && *str <= '9' ) *str = (*str-' ' + num) % 26 + ' '; // 26 = ('9'-' '+1)
  54. }
  55. }
  56.  
  57.  
  58. //-----------------------------------------------------------------------------//
  59. // 関数名 : DeCode()
  60. // 機能概要: 複合化処理
  61. //-----------------------------------------------------------------------------//
  62. void DeCode( char *str, int num )
  63. {
  64. for ( ; *str != '\n'; str++ ){
  65. if ( 'A' <= *str && *str <= 'Z' ) *str = (*str-'A' + 26-num) % 26 + 'A';
  66. else if ( 'a' <= *str && *str <= 'z' ) *str = (*str-'a' + 26-num) % 26 + 'a';
  67. else if ( ' ' <= *str && *str <= '9' ) *str = (*str-' ' + 26-num) % 26 + ' ';
  68. }
  69. }
  70.  
Success #stdin #stdout 0s 2864KB
stdin
fgeywgfyeawgyfgfhg YGUGEUIWGHUE GHUI 8763426346329 jduifhw
3
stdout
文字列を入力してください:
シフト値を入力してください(1~25):
暗号文 → ijhbzjibhdzjbijikj#BJXJHXLZJKXH#JKXL#! 9675967965"#mgxlikz
複合文 → fgeywgfyeawgyfgfhg YGUGEUIWGHUE GHUI 8763426346329 jduifhw