065 - Valid Number

本文介绍如何验证一个字符串是否表示一个数值,包括整数、小数和科学计数法表示的数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

Update (2015-02-10):
The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.



enum numtype {
	NOTNUM = 0,
	INTNUM,
	POINUM,
};

enum numtype checknum(char *numstr)
{
	int len, i, ret = INTNUM;

	if (*numstr == '-' || *numstr == '+')
		numstr++;
	len = strlen(numstr);
	if (!len)
		return NOTNUM;

	for (i = 0; i < len; i++) {
		if (!isdigit(numstr[i]) && numstr[i] != '.')
			return NOTNUM;
		if (numstr[i] == '.') {
			if (ret == POINUM || !i && !isdigit(numstr[i + 1]))
				return NOTNUM;
			else
				ret = POINUM;
		}
	}
	
	return ret;
}

bool isNumber(char* s)
{
	int slen = strlen(s);
	char *end = s + slen - 1;
	char *begin = s;

	while (end - s > 0 && *end == ' ')
		*end-- = '\0';
	while (*begin == ' ')
		*begin++ = '\0';
	if (!*begin)
		return 0;

	s = begin;
	char *ep = strchr(s, 'e');
	if (!ep)
		return checknum(s) == NOTNUM ? 0 : 1;
	*ep = '\0';
	if (checknum(s) != NOTNUM && checknum(ep + 1) == INTNUM)
		return 1;
	return 0;
}

test data

12.12
-13.23
12.12e8
12.12e8.1
-13.23e-8
.1           (true)
3.           (true)
.
 0


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值