이 코드는 왜 알파벳 범위를 여러 개로 쪼개 놓은 건가요?


제가 C에서 쓸 때는 대문자 검사할 때 이렇게 'A'와 'Z'사이에 있는 값인지만 검사했었어요

소스코드1

inline int is_upper_alpha(char chValue)
{
    return ((chValue >= 'A') && (chValue <= 'Z'));
}

근데 C++에서 다른 사람이 짠 코드를 보니까 대문자 검사를 엄청 여러 범위로 쪼개 놨는데 이렇게 해주는 이유가 있나요?

소스코드2

inline int is_upper_alpha(char chValue)
{
    if (((chValue >= 'A') && (chValue <= 'I')) ||
        ((chValue >= 'J') && (chValue <= 'R')) ||
        ((chValue >= 'S') && (chValue <= 'Z')))
        return 1;
    return 0;
}
  • 2016년 01월 21일에 작성됨

조회수 151


1 답변


좋아요
0
싫어요
채택취소하기

이걸 설명하려면 C/C++ 표준을 알아야 합니다. C/C++ 표준에서는 '0'-'9'까지의 character는 연속된 값을 가져야 한다고 정해놓았지만 그 외의 char 타입에 대해서는 정해진 규칙이 없습니다. 즉 C/C++ 표준에서 'B' = 'A'+1가 아닐 수 있습니다.

EBCDICI-J사이, R-S가 연속된 숫자가 아니기 때문에 저런 코드를 만든 것으로 추정됩니다.


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close