C
プログラミング
競技プログラミング
論理演算

アルファベットを大文字化または小文字化するテクニック

TwitterのTLを眺めていたら、論理演算を使ったテクニックが流れて来た。
「なるほど」と思ったので、忘れないためにやってみた。

どのようなテクニックかというと、

  • 大文字のアルファベット AND '_' -> 小文字化
  • 小文字のアルファベット OR ' ' -> 大文字化
  • 任意のアルファベット XOR ' ' -> 大文字なら小文字化, 小文字なら大文字化

といったもの。

lower_upper.c
#include <stdio.h>

#define LOWER_TO_UPPER(c) (c & '_')
#define UPPER_TO_LOWER(c) (c | ' ')
#define SWITCH_UPPER_LOWER(c) (c ^ ' ')

int main(void) {

    // 大文字から小文字
    printf("UPPER_TO_LOWER: %c\n", UPPER_TO_LOWER('A'));
    printf("SWITCH_UPPER_LOWER: %c\n", SWITCH_UPPER_LOWER('Q'));

    puts("");

    // 小文字から大文字
    printf("LOWER_TO_UPPER: %c\n", LOWER_TO_UPPER('a'));
    printf("SWITCH_UPPER_LOWER: %c\n", SWITCH_UPPER_LOWER('q'));

    return 0;
}
実行結果
UPPER_TO_LOWER: a
SWITCH_UPPER_LOWER: q

LOWER_TO_UPPER: A
SWITCH_UPPER_LOWER: Q

なるほど:thinking:

(以下 2018/01/07 0:25追記)

  • 注意点
    • わかりやすく書くためには、'_'や' 'を使わず、2進数や16進数で書く方が良い。
    • 文字数を少なくしたければ10進数を使うと良い。
    • 標準ライブラリにtolower(), toupper()があること。