- 締切済み
c言語 暗号化のプログラム
大文字アルファベットの文字列を暗号化するプログラムを作りたいのですが、どうやったら暗号化するのかわかりません。 暗号化は文字をずらして行います。 ABC→BDF Aは1文字目なので一文字ずらしてB Bは2文字目なので二文字ずらしてD Cは3文字目なので三文字ずらしてF わからないのは文字のをどうやってずらすのかです。 ヒントだけでもいいので・・・
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- master000
- ベストアンサー率33% (16/48)
#include <stdio.h> int main(void) { int c; while((c = getchar()) != EOF){ if('A' <= c && c < 'Z') c = 'A' + ((c-'A') * 2 + 1) % 26; putchar(c); } return 0; }
- yaemon_2006
- ベストアンサー率22% (50/220)
#include <stdio.h> int main(void) { int c, i; while((c = getchar()) != '\n'){ i = c - 'A' + 1; if(0 < i && i < 27) c = 'A' + (i * 2 - 1) % 26; putchar(c); } return 0; }
- yaemon_2006
- ベストアンサー率22% (50/220)
訂正。 c = upper[((i + 1) * 2) % 26] -> c = upper[(i * 2 + 1) % 26]
- yaemon_2006
- ベストアンサー率22% (50/220)
#include <stdio.h> int main(void) { char *upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int c, i; while((c = getchar()) != '\n'){ for(i = 0; upper[i]; i ++){ if(c == upper[i]){ c = upper[((i + 1) * 2) % 26]; break; } } putchar(c); } return 0; }
- iyomante
- ベストアンサー率60% (14/23)
Z越えの部分が引き切れてないよう思えます char moji; char result; moji = 'D'; // 例)仮に暗号化対象の文字がDとする int n = moji - 'A' + 1; // 何文字目かを取得 result = moji + n; // ずらす; // Zを越えてしまう上位13文字について if(result > 'Z') { result -= 26; // 一周させる } printf("%c\n", result); // 答え NO.2さんのループ部分と組み合わせて使って下さい
- redfox63
- ベストアンサー率71% (1325/1856)
すみません #2ですが n番目の文字をn個ずらすと言うのを見落としていました // 暗号化する初期文字列 char buf[] = "ABCDEFG"; char c = 0; int n = 0; for ( n=0; buf[n] != '\0'; n++ ) { c = buf[n] - 'A'; c += n + 1; c %= 26; c += 'A'; printf( "%C", c ); } printf( "\n" );
- redfox63
- ベストアンサー率71% (1325/1856)
// 暗号化する初期文字列 char buf[] = "ABCDEFG"; int n = 0; for ( n=0; buf[n] != '\0'; n++ ) { if ( buf[n] != 'Z' ) { // 文字列中の任意の位置の文字が 'Z'以外なら printf( "%C", buf[n]+1 ); } else { // 文字列中の任意の位置の文字が 'Z'なら printf( "%C", 'A' ); } } と言った具合です これを文字列に組上げれば良いですよ あと想定以外の文字がきた場合の処理も必要かと思います
- koko_u_
- ベストアンサー率18% (459/2509)
>わからないのは文字のをどうやってずらすのかです。 オフセット分だけ各文字に足して下さい。 Z はずらすと A に戻るの?
補足
ZはAに戻ります。 文字列は外から入力します。