c/c++语言开发共享C语言判断字符串是否为数字

  判断一个字符串是否为数字, 听起来很简单,实现还是有点难度的。 最近写了一个,如下:   #define is_blank(c) ((c) == ' '

 

判断一个字符串是否为数字, 听起来很简单,实现还是有点难度的。 最近写了一个,如下:

 

  #define is_blank(c) ((c) == ' ' || (c) == 't')  #define is_digit(c) ((c) >= '0' && (c) <= '9')  #define is_alpha(c) ( ((c) >= 'a' && (c) <= 'z') || ((c) >= 'a' && (c) <= 'z') )  #define is_hex_digit(c) (((c) >= 'a' && (c) <= 'f') || ((c) >= 'a' && (c) <= 'f'))    /* whether string s is a number.      returns 0 for non-number, 1 for integer, 2 for hex-integer, 3 for float */  int is_number(char * s)  {  	int base = 10;  	char *ptr;  	int type = 0;    	if (s==null) return 0;    	ptr = s;    	/* skip blank */  	while (is_blank(*ptr)) {  		ptr++;  	}    	/* skip sign */  	if (*ptr == '-' || *ptr == '+') {  		ptr++;  	}    	/* first char should be digit or dot*/  	if (is_digit(*ptr) || ptr[0]=='.') {    		if (ptr[0]!='.') {  			/* handle hex numbers */  			if (ptr[0] == '0' && ptr[1] && (ptr[1] == 'x' || ptr[1] == 'x')) {  				type = 2;  				base = 16;  				ptr += 2;  			}    			/* skip any leading 0s */  			while (*ptr == '0') {  				ptr++;  			}    			/* skip digit */  			while (is_digit(*ptr) || (base == 16 && is_hex_digit(*ptr))) {  					ptr++;  			}  		}    		/* handle dot */  		if (base == 10 && *ptr && ptr[0]=='.') {  			type = 3;  			ptr++;  		}    		/* skip digit */  		while (type==3 && base == 10 && is_digit(*ptr)) {  			ptr++;  		}    		/* if end with 0, it is number */  		if (*ptr==0)   			return (type>0) ? type : 1;  		else  			type = 0;  	}  	return type;  }

 

 

is_number(char *) 函数判断字符串是否为数字。如果不是,返回0。如果是整数,返回1。如果是十六进制整数,返回2. 如果是小数,返回3.

 

编一个测试程序:

 

 

  #include   #include     int main(int argc, char**argv)  {  	assert( is_number(null)  ==0 );  	assert( is_number("")    ==0 );  	assert( is_number("9a")  ==0 );  	assert( is_number("908") ==1 );  	assert( is_number("-908") ==1 );  	assert( is_number("+09")  ==1 );  	assert( is_number("-+9")  ==0 );  	assert( is_number("  007")  ==1 );  	assert( is_number("0x9a8f") ==2 );  	assert( is_number("-0xab")  ==2 );  	assert( is_number("-9.380") ==3 );  	assert( is_number("-0xff.3") ==0 );  	printf("test okn");  }

 

运行, "test ok"

 

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/606003.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐