【发布时间】:2011-02-13 00:55:31
【问题描述】:
我知道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 ——这不再重要了。)
【问题讨论】:
-
99进制中允许哪些“数字”?
-
@Mark: 一些非常难以辨认的字符!!!
-
允许的数字是那些您定义允许的...除了
b<=10、b=16和b=64,没有标准的允许数字集,您可以使用字母表在b=10和b=36之间进行推断,但过去是完全任意的 -
基数永远小于 36。
-
“基数永远小于 36”——啊,那个老作业问题。