如何编写自己的isnumber()函数?

时间:2013-10-06 07:57:26

标签: c numbers argv

我是C的新手,我正在考虑如何自己编写这个功能。我从命令行中获取一个参数,因此它存储在argv数组中,我想决定它是否是数字。最简单的方法是什么?

谢谢

#include <stdio.h>

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;
}

4 个答案:

答案 0 :(得分:3)

了解strtol(3)。您可以将其用作

bool isnumber(const char*s) {
   char* e = NULL;
   (void) strtol(s, &e, 0);
   return e != NULL && *e == (char)0;
}

但这不是很有效(例如对于具有数百万位的字符串),因为将进行无用的转换。

但实际上,您经常关心该数字的值,因此您可以在程序参数处理中调用strtolargv参数为main)并关注strtol的结果,即该数字的实际值。

您使用strtol可以更新(通过其第三个参数)指向已解析字符串中数字末尾的指针的事实。如果该结束指针没有成为字符串的结尾,那么转换就会以某种方式失败。

E.g。

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);
 } 

答案 1 :(得分:0)

怎么样这样:

#include <ctype.h>

if(isdigit(input))
{
  return true;
}
else
{
  return false;
}

更简单,因为 H2CO3 发表了评论:

 #define isnumber isdigit

OR

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main () {

  //some code
  theChar = atoi(string[i]);
  if (isdigit(theChar)) {
    return true;
  }
  return 0;
}

答案 2 :(得分:0)

怎么样

#define MYISNUM(x) ((x) >= '0' && (x) <= '9')

答案 3 :(得分:0)

我不确定您是要检查它是数字还是数字而argv[1]类型为char *而不是int,所以您应该这样做:

bool isDigit(char *param)
{   
    return (*param >= `0` && *param <= `9`)
}

bool isNumber(char *param)
{   
    while (param)
    {
        if (!isDigit(param))
            return false;
       param++;
    }
    return true;
}