2141 Message Decowding
2141 Message Decowding
問題は超簡単。
26文字の新しいアルファベットを定義して、それに基づいて入力された文字列を
デコードするというもの。
ただちょっと詰まったところがあったので備忘録。
詰まったコード。
#include<cstdio> #include<ctype.h> using namespace std; int main() { char key[27]; scanf("%s", key); char c; while ((c = getchar()) != '\n') { if (c == ' ') printf(" "); else if (isupper(c)) { printf("%c", toupper(key[c-'A'])); } else { printf("%c", key[c-'a']); } } printf("\n"); }
これを実行すると、まず最初のscanfで新しいアルファベットを
定義するのだけれど、改行の'\n'はkeyに読み込まれないので、
改行時に叩いたEnter分の'\n'はwhileに書いたgetchar()で読み込まれる。
当然こんな動きは意図していないので、バグってしまうというわけだった。
これに対処するには、scanfのあとにgetchar()を入れてEnterを叩いて入力された'\n'を読み飛ばしてやる必要がある。
これで通ったけど、こんな解釈でいいのだろうか。。。