47.表示数值的字符串
题目内容:
代码及思路:
判断字符串是否表示的是数值,要满足以下几点:
1.判断第一位符号位(只有第一位和含e指数的下一位可能含符号,其他不可能)
2.小数点只可能出现在整数部分且只可能出现1次
3.e指数后跟的是整数
#include<iostream>
#include<string>
using namespace std;
class Solution
{
public:
bool isNumeric(char* string)
{
//首先对无效输入进行判断
if (string == nullptr)
return false;
//判断符号位
if (*string == '+' || *string == '-')
string++;
if (*string == '\0')
return false;
//需要统计E和小数点的个数,有且仅有1个
int numofE = 0, numofdot = 0,numofInt=0;
while (*string != '\0')
{
if (*string >='0'&&*string <= '9')
{
string++;
numofInt++;
}
else if (*string == '.')
{
if (numofdot > 0 || numofE > 0) //没有数字就已经有小数点或者指数,该字符串肯定不是数值
return false;
string++;
numofdot++;
}
else if (*string == 'e' || *string == 'E') //与小数点时的判断思路一致
{
if (numofInt == 0 || numofE > 0)
return false;
string++;
numofE++;
//如果紧跟着正负号
if (*string == '+' || *string == '-')
{
string++;
}
if (*string == '\0') //没有跟数字
return false;
}
else
return false;
}
return true;
}
};
void main()
{
Solution* object = new Solution;
string str1;
getline(cin, str1);
char*string = &str1[0];
bool res = object->isNumeric(string);
cout << res << endl;
}