如何编写自己的isnumber()函数?
我是C的新手,我正在考虑如何自己编写这个函数。 我从命令行中获取一个参数,因此它存储在argv数组中,我想决定它是否是数字。 最简单的方法是什么?
谢谢
#include int isNumber(int *param) { if (*param > 0 && *param < 128) return 1; return 0; } int main(int argc, char *argv[]) { if (argc == 2) isNumber(argv[1]); else printf("Not enought parameters."); return 0; }
阅读strtol(3) 。 你可以用它作为
bool isnumber(const char*s) { char* e = NULL; (void) strtol(s, &e, 0); return e != NULL && *e == (char)0; }
但这不是很有效(例如对于具有数百万位的字符串),因为将进行无用的转换。
但实际上,您经常关心该数字的值,因此您将在程序参数处理中调用strtol
(对argv
参数),并关注strtol
的结果,即strtol
的实际值。
您使用strtol
可以更新(通过其第三个参数)指向解析字符串中数字末尾的指针。 如果该结束指针不成为字符串的结尾,则转换以某种方式失败。
例如
int main (int argc, char**argv) { long num = 0; char* endp = NULL; if (argc < 2) { fprintf(stderr, "missing program argument\n"); exit (EXIT_FAILURE); }; num = strtol (argv[1], endp); if (endp == NULL || *endp != (char)0) { fprintf(stderr, "program argument %s is bad number\n", argv[1]); exit (EXIT_FAILURE); }; if (num<0 || num>=128) { fprintf(stderr, "number %ld is out of bounds.\n", num); exit(EXIT_FAILURE); }; do_something_with_number (num); exit (EXIT_SUCCESS); }
怎么样
#define MYISNUM(x) ((x) >= '0' && (x) <= '9')
怎么样这样:
#include if(isdigit(input)) { return true; } else { return false; }
或更简单,如H2CO3评论:
#define isnumber isdigit
要么
#include #include #include int main () { //some code theChar = atoi(string[i]); if (isdigit(theChar)) { return true; } return 0; }
我不确定你是否要检查它是数字还是数字而argv[1]
的类型是char *
not int所以你应该这样做:
bool isDigit(char *param) { return (*param >= `0` && *param <= `9`) } bool isNumber(char *param) { while (param) { if (!isDigit(param)) return false; param++; } return true; }