シーザー暗号についての質問です
大文字を3字ずらす小文字を5字ずらすというプログラムを作っています。
ぶち当たった壁が大文字は3字ずらすことは可能なのですが小文字を5字ずらすことができません
どなたかどこに問題があるのか教えていただいてもよろしいでしょうか。
C
1#include <stdio.h> 2#include <string.h> 3 4#define X 5 5#define Y 3 6 7void decode(char *str, char *to){ 8 int i; 9 int len1, len2; 10 len1 = strlen(str); 11 len2 = strlen(to); 12 for(i=0;i<len1;i++){ 13 if(str[i] >= 'a' && str[i] <= 'z') 14 str[i] = (str[i] - 'a' + X ) % 26 + 'a'; 15 } 16 for(i=0;i<len2;i++){ 17 if(to[i] >= 'A' && to[i] <= 'Z') 18 to[i] = (to[i] - 'A' + Y ) % 26 + 'A'; 19 } 20 return; 21} 22int main(void) { 23 char str[256]; 24 char to[256]; 25 for( ;NULL != fgets(str, sizeof(str), stdin);) { 26 for( ;NULL != fgets(to, sizeof(to), stdin);){ 27 decode(str, to); 28 printf("%s%s",str,to); 29 } 30 } 31
コードはバッククオート三つで括ってください。よくわからない場合は、マークダウン記法について調べてみてください。
あと、なぜmain関数で二重ループを用いているんです?ご提示のコードの方針がわからないです。
fgetsの中にすべてまとめてしまうと中身が多すぎるといわれたので別にループさせる必要があるのかなと思いこの形をとりました
よくわからないです。そもそもstrとtoの違いはなんですか?strを復号してtoにするのだとしたら、なぜtoに対する入力を求めているのでしょう?
えっと初心者なのでというのが言い訳になっちゃうレベルなんですが例えばstrのみで大文字小文字両方を復元することは可能なんでしょうか?
一文字一文字チェックするのなら充分可能です。
strのみで復元してみたらできました。ありがとうございます
出来たようでなによりです。ぜひ、ご自身で回答を書いて自己解決ボタンを押してください。これからのプログラミング資源の一つになります。
なお、もし入力が二つ必要な場合も、二重ループにすると上手くいかないと思います。単一のfor文で、条件分岐部分をちょいと工夫してやってください。
回答1件
あなたの回答
tips
プレビュー