Функция isDigit
проверяет, является ли один символ цифрой, то есть в диапазоне от '0'..'9'
.Чтобы проверить, является ли строка числом, я бы предложил использовать функцию strtol
.
long strtol(const char *str, char **str_end, int base )
, которая преобразует строку str
в целое число, а также устанавливает указательstr_end
первому персонажу, который больше не участвовал в конверсии.Если вам требуется, чтобы ни один символ не следовал за вашим номером, то str_end
должен указывать на конец строки, то есть на символ завершения строки '\0'
:
#include <stdio.h>
#include <stdlib.h>
int isNumber(const char* str) {
if (!str || *str=='\0') { // NULL str or empty str: not a number
return 0;
}
char* endOfNum;
strtol(str,&endOfNum,10);
if (*endOfNum == '\0') { // string is at its end; everything in it was a valid part of the number
return 1;
} else {
return 0; // something that is not part of a number followed.
}
}
int main() {
const char* vals[] = {
"10b",
"-123",
"134 ",
" 345",
"",
NULL
};
for (int i=0; vals[i]; i++) {
printf("testing '%s': %d\n", vals[i], isNumber(vals[i]));
}
}
Выходные данные:
testing '10b': 0
testing '-123': 1
testing '134 ': 0
testing ' 345': 1
testing '': 0
Адаптируйте значение угловых падежей, таких как пустые строки или NULL-строки, к вашим потребностям.