很恶心的字符串模拟题,主要是测试点很恶心。
测试点0:样例的情况,样例能过这个就能过
测试点1:除数是0的情况,特判输出
测试点2:除数是单数,输出“The average of 1 number is Y”,注意number后面没有s!!!
测试点3:最恶心的一个测试点,因为把形如“123.”,小数点在最后一位的数也算作合法数了,题目并没有明确说明,我一直以为小数点在最后也是非法的,找了好久TvT
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
bool isclegal(char c){
if(!(c>='0'&&c<='9') && c!='-' && c!='.') return false;
return true;
}
bool isslegal(string s){
int dian = 0;
int pd;
bool havenum = false;
for(int i=0; i<s.size(); i++){
if(!isclegal(s[i])){
return false;
}else{
if(s[i] == '-'){
if(i != 0) return false;
}
if(s[i] == '.'){
if(i==0) return false;
pd = i;
dian++;
}
if(dian > 1) return false;
if(s[i]<='9' && s[i]>='0') havenum = true;
}
}
if(!havenum) return false;
if(dian == 1){
int len = s.size() - pd - 1;
if(len > 2) return false;
}
double d = stof(s);
if(d<-1000 || d>1000) return false;
return true;
}
int main(){
int n;
double sum = 0;
int num = 0;
scanf("%d", &n);
string str[n];
for(int i=0; i<n; i++){
cin >> str[i];
if(isslegal(str[i])){
sum += stof(str[i]);
num++;
}else{
printf("ERROR: %s is not a legal number\n", str[i].c_str());
}
}
if(num == 0){
printf("The average of 0 numbers is Undefined");
}else if(num == 1){
printf("The average of 1 number is %.2f", num, sum/(num*1.0));
}else{
printf("The average of %d numbers is %.2f", num, sum/(num*1.0));
}
return 0;
}