Caesar cipher

ちょっと難しいかな? このようにすれば自動でcaesar暗号が作れる.

素直に小文字にするversion

#include <stdio.h>
void caesar(int);

int main(int argc, const char *argv[]) {
  int ch;
  while ((ch = getchar()) != EOF) {
    caesar(ch);
  }
  return 0;
}

void caesar(int ch) {
  if (('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z')) {
    // 小文字に
    if ('A' <= ch && ch <= 'Z') {
      ch += ('a' - 'A');
    }
    // 3文字進める
    ch += 3;
    if ('z' < ch) {
      // 'z'の範囲より多ければ, アルファベットの分, 26減らす.
      ch -= 26;
    }
    putchar(ch);
  } else {
    putchar(ch);
  }
}

caesar部分だけ. 小文字変換が実はこんなのもできるんですよというもの.

void caesar(int ch) {
  if (('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z')) {
    // 小文字に
    ch |= 0x20;
    // 3文字進める
    ch += 3;
    if ('z' < ch) {
      // 'z'の範囲より多ければ, アルファベットの分, 26減らす.
      ch -= 26;
    }
    putchar(ch);
  } else {
    putchar(ch);
  }
}

Soft Forum P.C. Club