面试题20:表示数值的字符串

题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、“1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是。

#include<iostream>
using namespace std;
bool scanUnsignedInteger(const char** str) {
	const char* before = *str;
	while (**str != '\0' && **str > '0' && **str < '9') {
		(*str)++;
	}
	//*str>before表示存在0到9的数字
	return *str > before;
}
bool scanInteger(const char** str) {
	if (**str == '+' || **str == '-') {
		(*str)++;
	}
	return scanUnsignedInteger(str);
}
bool isNumeric(const char* str) {
	//数字字符串形式:A[.[B]][e|EC]或者.[B]][e|EC
	if (str == nullptr) {
		return false;
	}
	//1.先检查整数部分 整数部分为有符号数
	bool numeric = scanInteger(&str);
	//2.再检查小数部分 小数部分为无符号数
	if (*str == '.') {
		str++;
		numeric = numeric && scanUnsignedInteger(&str);
	}
	//3.最后检查指数部分 指数部分为有符号数
	if (*str == 'e' || *str == 'E') {
		str++;
		numeric = numeric && scanInteger(&str);
	}
	return numeric && (*str == '\0');
}
int main() {
	char a[] = "+3";
	cout << isNumeric(a) << endl;
	char b[] = "-5e2";
	cout << isNumeric(b) << endl;
	char c[] = "12e";
	cout << isNumeric(c) << endl;
	char d[] = "1a3.14";
	cout << isNumeric(d) << endl;
	char e[] = "+-2";
	cout << isNumeric(e) << endl;
	char f[] = "12E3.2";
	cout << isNumeric(f) << endl;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值