C语言判断字符串是否为数字
2015-04-15 23:06
155 查看
判断一个字符串是否为数字, 听起来很简单,实现还是有点难度的。 最近写了一个,如下:
is_number(char *) 函数判断字符串是否为数字。如果不是,返回0。如果是整数,返回1。如果是十六进制整数,返回2. 如果是小数,返回3.
编一个测试程序:
运行, "test OK"
#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 <stdio.h> #include <assert.h> 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 OK\n"); }
运行, "test OK"
相关文章推荐
- Java中判断字符串是否为数字的五种方法
- Java判断字符串为空、字符串是否为数字
- Java判断十一位字符串是否为纯数字
- java判断字符串是否是数字
- java中判断字符串是否为数字的方法的几种方法
- 一个判断字符串是否是数字的正则表达式
- 判断给定的字符串是否是数字
- 判断字符串是否为数字-备
- 在Java中用正则表达式判断一个字符串是否是数字的方法
- 判断字符串是否全部是数字
- 【非正则】判断一个字符串是否由数字组成
- c#中如何判断字符串是否为数字
- JS判断字符串是否为纯数字
- isNaN用法:判断字符串里是否含有数字
- java中判断字符串是否为数字的几种方法
- 此函数用来判断传入的字符串参数是否全是字母数字的组合
- java中判断字符串是否为数字的方法的几种方法
- JAVA中判断字符串是否为数字的方法
- Oracle 中如何判断一个字符串是否为数字
- 判断一个字符串是否是合法数字串