13 根据语法图将字符串翻译成实数并返回相应值

某程序设计语言中,对实数的定义如下语法图所示。

语法图中的数字是属于[0,9]中的任意普通数字.

这个语法图定义的实数是C、C++、Java 等程序设计语言中实数的子集,所以,这样的实数可以与你答题时所采用的程序设计语言中的实数进行运算。

定义并实现一个函数,它带有两个参数,第一个参数代表一个字符串,第二个参数代表一个实数,函数的返回值是布尔类型。其功能是:试图把参数字符串根据语法图翻译成一个实数,若能够成功翻译,则进一步用翻译出的实数与实数参进行数值比较,若大于实数参数则函数返回真值;若参数字符串不满足语法图对实数的定义,或者,翻译出的实数不大于实数参数,则返回假值。例如:当参数字符串分别为”2a.4”、”-3.14”、”3.b”时、因不满足语法图对实数的定义,则无论实数参数的值是多少,均返回假值;当给定参数字符串分别为”123”、”123.”、“123.789”时,由于它们均满足语法图对实数的定义,所以可以把它们翻译成实数,随后与给定的实数参数进行数值比较,根据比较结果给出返回值。

boolean judge(char str[],double compareWith){

        int i=0;
        double figure=0.0;
        int flag=0;
        int count=0;

        if(str[0]>'9'||str[0]<'0')

                return false;

        for(int j=1;str[j]!='\0';j++){

                if(str[j]!='.'||str[j]>'9'||str[j]<'0')

                        return false;

                if(str[j]=='.'&&flag==0)

                        flag=j;
                if(str[j]=='.'&&flag!=0)

                        return false;

        }
        for(int i=0;i<strlen(str);i++){
            if(i<flag){
                figure=figure*10+(str[i]-'0');
            }
            if(i>flag){
                figure=figure+(str[i]-'0')*pow(10,-count);
                count++;
            }
            if(i==flag){
                count++;
            }
        if(figure>compareWith)
            return true;
        else
            return false;

}
int main() {  
    // 测试用例  
    printf("%d\n", judge("123.45", 100.0)); // 应该输出 1 (true)  
    printf("%d\n", judge("-3.14", 3.14));  // 应该输出 0 (false)  
    printf("%d\n", judge("3.b", 0.0));     // 应该输出 0 (false)  
    printf("%d\n", judge("123", 123.0));   // 应该输出 0 (false),因为等于  
    printf("%d\n", judge("-123.456", -123.456)); // 应该输出 0 (false),因为等于  
    return 0;  
}

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值