程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言判斷字符串是否為數字

C語言判斷字符串是否為數字

編輯:關於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 OK\n");
}


 

運行, "test OK"

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved