输入一串字符,请判断它是否可以成为一个浮点数的合法表示。浮点数的表示需要满足以下格式:
- 可以有
-
或+
,也可以没有,但最多只有一个,且必须出现在第一个字符; - 可以有小数点,也可以没有小数点,但最多只有一个小数点;
- 整数部分可以省略、小数部分也可以省略、但不能同时省略。
输入格式
若干个字符,表示一个有待验证的字符串,保证每个字符都是可见字符,保证不会出现空格或换行。
输出格式
如果输入是一个浮点数的合法表示,输出 Valid
,否则,输出 Invalid
。
数据范围
设输入的字符数量为 n,有 1≤n≤5000。
样例数据
输入:
+3.1415926
输出:
Valid
输入:
1.0e10
输出:
Invalid
输入:
-25.
输出:
Valid
输入:
.
输出:
Invalid
输入:
-.
输出:
Invalid
题解
本题关键点:分清逻辑,不合法的情况:
1. 有多余的小数点(>1)
2. 除了第一个(只包含加减号)外,数中出现加减号和其他字符
3. 数字的数量等于0
代码如下。
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
cin>>s;
int len,cnt,num;
len=s.length();
num=0;
cnt=0;
if(s[0]=='-' || s[0]=='+' || s[0]=='.' || isdigit(s[0])){
if(s[0]=='.'){
num++;
}
for(int i=1;i<len;i++){
if(isdigit(s[i]) || s[i]=='.'){
if(s[i]=='.'){
num++;
}else{
cnt++;
}
}else{
cout<<"Invalid"<<endl;
return 0;
}
}
if(cnt==0 || num>=2){
cout<<"Invalid"<<endl;
}else{
cout<<"Valid"<<endl;
}
}else{
cout<<"Invalid"<<endl;
}
return 0;
}