カスタムライブラリで実装を見ました:
inline int is_upper_alpha(char chValue)
{
if (((chValue >= 'A') && (chValue <= 'I')) ||
((chValue >= 'J') && (chValue <= 'R')) ||
((chValue >= 'S') && (chValue <= 'Z')))
return 1;
return 0;
}
それは イースターエッグ ですか、それとも標準のC/C++メソッドに対する利点は何ですか?
inline int is_upper_alpha(char chValue)
{
return ((chValue >= 'A') && (chValue <= 'Z'));
}
このコードの作成者は、おそらく、ある時点で [〜#〜] ebcdic [〜#〜] をサポートする必要がありました。文字の数値は非連続です(I
、J
およびR
、S
(ご想像のとおり)。
CおよびC++標準では、文字0
から9
はまさにこの理由で連続した数値を持っているため、これらの方法はどちらも厳密に標準に準拠していません。
EBCDICとASCIIの両方をカバーしようとしているようです。あなたの代替方法はEBCDICでは機能しません(誤検知はありますが、誤検知はありません)
CおよびC++ do'0'-'9'
は連続しています。
標準ライブラリの呼び出しdoは、それらがASCII、EBCDIC、または他のシステムで実行されるかどうかを知っているため、より移植性が高く、おそらくより効率的であることに注意してください。