【经典算法】:用字符串模拟计算器的生成

前言

一般的制作计算器都会比较不智能,会有很严格的输入格式
在这里,我做了一个简化,使的即使没有严格地输入输出格式,也能够达到计算器的效果

比如说:下面这些例子
这里写图片描述

这里就是用字符串读入了一行,然后对字符串进行处理,得到了最后结果,那么是如何做到的呢?

思路

读入一行之后,前面有部分全是数字,这样他就为操作数1,后面有部分全为数字,这样就是操作数2
中间有符号为+ - * / 之一,这样也能把它存起来

这样就能达到分离数据的目的,然后把分离出来的数据还原,最后做加减运算即可

代码

//  count1保存操作数1的长度,count2保存操作数2的长度,sum1保存操作数1的值,sum2保存操作数2的值
#include <iostream>
using namespace std;
int num1[10],num2[10];    //保存操作数1和操作数2
char temp;   //保存运算符
void main()
{   
    int pos,count1=0,count2=0,sum1=0,sum2=0;
    char s[100];
    cin.getline(s,100);   //读入一行
    for(int i=0;i<100;i++){
        if(s[i]>='0' && s[i]<='9'){
            num1[count1++] = s[i]-'0';   //获得操作数1
        }
        if(s[i]=='+' ||s[i]=='-' ||s[i]=='*'||s[i]=='/'){
            temp=s[i];    //获得运算符
            pos = i;     //pos保存下标
            break;
        }
    }
    for(i=pos+1;i<100;i++){
        if(s[i]>='0' &&s[i]<='9'){
            num2[count2++] = s[i]-'0';    //获得操作数2
        }
    }
    for(i=0;i<count1;i++){
        sum1*=10;
        sum1+=num[i];         //算出操作数1
    }
    for(i=0;i<count2;i++){
        sum2*=10;
        sum2+=num[i];         //算出操作数2
    }
    //展示结果模块
    if(temp=='+') cout<<sum1+sum2<<endl;
    if(temp=='-') cout<<sum1-sum2<<endl;
    if(temp=='*') cout<<sum1*sum2<<endl;
    if(temp=='/') cout<<sum1/sum2<<endl;
}

成果展示

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值