【剑指offer】——表示数值的字符串

题目描述

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

解答:

#include<stdio.h>
#include<stdbool.h>
//判断是否是0~9之间的数,
//要对实参传进来的指针进行直接操作的话,就可以使用二级指针,把实参的地址传给二级指针,通过二级指针去改变一级指针的值。
bool scanfNumber(const char** str)
{
	const char* before=*str;
	while(**str!='\0'&&**str>='0'&&**str<='9')
		++(*str);

	return  *str>before;
}
//判断是否有‘+’、‘-’
bool scanfInterget(const char** str)
{
	if(**str=='+'||**str=='-')
		++(*str);

	return scanfNumber(str);
}

bool isNumber(const char* str)
{
	if(str==NULL)
		return false;

	bool numberic=scanfInterget(&str);
	//判断是否有.
	if(*str=='.')
	{
		++str;
		//三种情况
		//1、小数可以没有整数部分,.123=0.123
		//2、小数后面没有数字。123.=123.0
		//3、正常整数和小数都有123.23
		numberic=scanfNumber(&str)||numberic;
	}
	//判断是否有e、E
	if(*str=='e'||*str=='E')
	{
		++str;
		//&&原因
		//1、当e或者E前,没有数字,错误:.e、e、-e
		//2、当e或者E后,没有整数12e、12e+5.4
		numberic=numberic&&scanfInterget(&str);
	}
	return numberic&&*str=='\0';//判断字符串是否匹配完,如果还有未匹配的字符,一定错误
}

int main(int argc, const char *argv[])
{
	const char str[]={"123.1.1"};
	if (isNumber(str))
		printf("True!\n");
	else 
		printf("False!\n");

	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值