シーザー暗号

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あつし

シーザー暗号

#1

投稿記事 by あつし » 16年前

大学の課題で今シーザー暗号を作っています。
一様プログラムはできたのですがprintf("3と入力してください: ");で3と入力せずに3こづらしたいのですがどのようにこのプログラムを改良すればよいですか?

  

 #include <stdio.h>

  #include <string.h>


 char *shift_char(char x[/url], int y){

 static const char table[/url] =

 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

 "abcdefghijklmnopqrstuvwxyz"

 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

 "abcdefghijklmnopqrstuvwxyz";

 static const int table_len = (sizeof(table)-1) / 2;

 char *p;

 y %= table_len;


 for(p=x;*p;p++)

 *p = *(strchr(table, *p) + y);

 return x;

 }

 int main(void){

  char input[301];

  int count;

  printf("アルファベットを入力してください: ");

  scanf("%s", input);

  printf("3と入力してください: ");

  scanf("%d", &count);

    printf("%s", shift_char(input, count));

  return 0;

}

御津凪

Re:シーザー暗号

#2

投稿記事 by 御津凪 » 16年前

printf("%s", shift_char(input, 3));
これで良いのでは?

あつし

Re:シーザー暗号

#3

投稿記事 by あつし » 16年前

ありがとうございました。もう一つ質問があるのですがabc100と printf("アルファベットを入力してください: "); の所に入力すると、defと3桁シフトはするのですが100という数字が表示されません。3桁シフトして、数字はそのままにするにはどうしたらよいですか?




#include <stdio.h>

  #include <string.h>


 char *shift_char(char x[/url], int y){

 static const char table[/url] =

 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

 "abcdefghijklmnopqrstuvwxyz"

 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

 "abcdefghijklmnopqrstuvwxyz";

 static const int table_len = (sizeof(table)-1) / 2;

 char *p;

 y %= table_len;


 for(p=x;*p;p++)

 *p = *(strchr(table, *p) + y);

 return x;

 }

 int main(void){

  char input[301];

  int count;

  printf("アルファベットを入力してください: ");

  scanf("%s", input);

  printf("%s", shift_char(input, 3));

  printf("%s", shift_char(input, count));

  return 0;

}

御津凪

Re:シーザー暗号

#4

投稿記事 by 御津凪 » 16年前

for 文内で、シフト対象外(英字以外)の文字はそのまま出力するようにすれば良いでしょう。

この場合なら、 strchr を使って先に table 内に含まれているかどうかをチェックし、
含まれていたらシフト処理を実行する方法が楽でしょう。
if(strchr(table,*p) != NULL){
    // 含まれている
}
こんな感じで。

strchr は含まれていない文字があれば NULL を返すので、
*(strchr(table, *p) + y) はおかしなことになります。

(規約の方に書いていますが、出来るならソースコードはプレタグで囲ってください)

通りすがり

Re:シーザー暗号

#5

投稿記事 by 通りすがり » 16年前

老婆心ながら、「一様」とは「様子が同じであるさま」のことです。
「ひとまず」「とりあえず」の意味で使うのは
「一応(いちおう)」です。

閉鎖

“C言語何でも質問掲示板” へ戻る