Я знаю, что 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, а не то, что это больше не имеет значения.)