PAT甲题题解-1108. Finding Average (20)-字符串处理

Posted 辰曦~文若

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲题题解-1108. Finding Average (20)-字符串处理相关的知识,希望对你有一定的参考价值。

求给出数的平均数,当然有些是不符合格式的,要输出该数不是合法的。

这里我写了函数来判断是否符合题目要求的数字,有点麻烦。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxn=105;

bool islegal(char*str){
    int len=strlen(str);
    int point=0,decimal=0;
    for(int i=0;i<len;i++){
        //if(i==0 && str[i]==\'0\'&&len>1){
        //    if(str[1]!=\'.\')
        //        return false;
        //}
        if(str[i]==\'-\' && i!=0)
            return false;
        else if(str[i]==\'-\' && i==0)
            continue;
        if(str[i]==\'.\' && i==0)
            return false;
        if(str[i]==\'.\'){
            point++;
            if(point>=2)
                return false;
        }
        else if(str[i]<\'0\' ||str[i]>\'9\')
            return false;
        else if(str[i]>=\'0\' && str[i]<=\'9\' && point==1){
            decimal++;
            if(decimal>=3)
                return false;
        }
    }
    return true;
}

int main()
{
    int n;
    char str[maxn];
    scanf("%d",&n);
    double sum=0.0;
    double a;
    int k=0;
    for(int i=0;i<n;i++){
        scanf("%s",str);
        bool flag=false;
        if(islegal(str)){
            a=atof(str);
            if(a>=-1000.0 && a<=1000.0)
                flag=true;
        }
        if(flag){
//printf("%lf\\n",a);
            sum+=a;
            k++;
        }
        else{
            printf("ERROR: %s is not a legal number\\n",str);
        }
    }
    if(k==0){
        printf("The average of 0 numbers is Undefined\\n");
    }
    else if(k==1){
        printf("The average of %d number is %.2lf\\n",k,sum);
    }
    else{
        printf("The average of %d numbers is %.2lf\\n",k,sum/k);
    }
    return 0;
}
View Code

 

可以参考下面别人的题解,用到了sscanf和sprintf函数,就很方便:

http://www.liuchuo.net/archives/1924

以上是关于PAT甲题题解-1108. Finding Average (20)-字符串处理的主要内容,如果未能解决你的问题,请参考以下文章

pat 1108 Finding Average(20 分)

PAT 甲级 1108 Finding Average (20分)

PAT甲题题解-1075. PAT Judge (25)-排序

PAT甲题题解-1070. Mooncake (25)-排序,大水题

PAT甲题题解-1077. Kuchiguse (20)-找相同后缀

PAT甲题题解-1050. String Subtraction (20)-水题