我知道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 ——这不再重要了。)