ctype.h
を定義することは知っていますisdigit
が、これは基数10でのみ機能します。数値が特定の基数の数字であるかどうかを確認したいと思いint b
ます。
Cでこれを行うための最良の方法は何ですか?
編集
私は次の関数を思いついた:
int y_isdigit(char c, int b) {
static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static int digitslen = sizeof digits - 1;
static int lowest = 0;
int highest = b - 1;
if(highest >= digitslen)
return -1; /* can't handle bases above 35 */
if(b < 1)
return -2; /* can't handle bases below unary */
if(b == 1)
return c == '1'; /* special case */
int loc = strchr(digits, c);
return loc >= lowest && loc <= highest;
}
これに対して作成されたバージョンschnaaderを使用することに利点はありますか?(これには、ユーザーの文字セットがASCIIであることに依存しないという追加の利点があるようです。これは、もはやそれほど重要ではありません。)