思路:
1.不是数字的位置只能在第一个且为负号,或者在字符串的倒数第一、二、三位置、或者不存在;
2.上面的方法也可以用sscanf
或者sprintf
进行判定;
3.数字要在规定区间内;
4.按.2f
输出就好了;
代码:
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
bool isLegal(string s){
int pos=s.find('.'),len=s.length();
if(pos==len-1||pos==len-2||pos==len-3||pos==string::npos){
for(int i=0;i<len;i++)
if(!isdigit(s[i])&&i!=pos&&(i||s[i]!='-')) return false;
double n=stod(s);
if(n>1000||n<-1000) return false;
return true;
}
return false;
}
int main(){
int n,cnt=0;
double sum=0;
cin>>n;
for(int i=0;i<n;i++){
string s;
cin>>s;
if(!isLegal(s)) printf("ERROR: %s is not a legal number
",s.c_str());
else{
sum+=stod(s);
cnt++;
}
}
if(cnt>1) printf("The average of %d numbers is %.2f",cnt,sum/(cnt*1.0));
else if(cnt==1) printf("The average of 1 number is %.2f",sum);
else printf("The average of 0 numbers is Undefined");
return 0;
}