题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
代码实现:
抄袭剑指offer,主要在于2个封装函数,否则会比较麻烦。
jumpoverchar----跳过正负号
scanUnsignedint----跳过数字
注意:
对指针进行运算。
- 二维指针
- 引用
class Solution {
public:
bool scanUnsignedint(char* & str)
{
char* tmp=str;
while(*str!='\0'&&*str>='0'&&*str<='9')
++str;
return str>tmp;//只要有数字就行,用指针地址来判断
}
bool jumpoverchar(char*& str)
{
if(*str=='+'||*str=='-')
str++;
return scanUnsignedint(str);
}
bool isNumeric(char* string)
{
//小数
//科学计数法(底数,指数都可能有正负号,e大小写)
//正负号
if(string == NULL)
return false;
bool numer=jumpoverchar(string);
if(*string=='.')
{
++string;
/*.123 2333. 233.2131
所以用||,3种情况*/
numer=scanUnsignedint(string)||numer;
}
if(*string=='e'||*string=='E')
{
++string;
numer=numer&&jumpoverchar(string);
}
return numer&&*string=='\0';
}
};
调试代码:
#include <iostream>
using namespace std;
bool scanUnsignedint(char* & str)
{
char* tmp=str;
while(*str!='\0'&&*str>='0'&&*str<='9')
++str;
return str>tmp;//只要有数字就行,用指针地址来判断
}
bool jumpoverchar(char*& str)
{
if(*str=='+'||*str=='-')
str++;
return scanUnsignedint(str);
}
bool isNumeric(char* string)
{
//小数
//科学计数法(底数,指数都可能有正负号,e大小写)
//正负号
if(string == NULL)
return false;
bool numer=jumpoverchar(string);
if(*string=='.')
{
++string;
/*.123 2333. 233.2131
所以用||,3种情况*/
numer=scanUnsignedint(string)||numer;
}
if(*string=='e'||*string=='E')
{
++string;
numer=numer&&jumpoverchar(string);
}
return numer&&*string=='\0';
}
int main()
{
char* str="1+23";
bool Res=isNumeric(str);
cout<<Res<<endl;//as
return 0;
}