表达式计算(模拟)

http://acm.hdu.edu.cn/showproblem.php?pid=3347

C++ Map秒杀

附上代码

#include<stdio.h>
#include<map>
#include<string.h>
#include<string>
#include<iostream>
#include<ctype.h>
using namespace std;
map<string,int>mp;
map<string,int>::iterator it;
int main()
{
    //freopen("in.txt","r",stdin);
    int t;
    scanf("%d",&t);
    while(t--)
    {
        mp.clear();
        int sum=0;
        int n;
        scanf("%d",&n);
        char s[22];
        int val;
        //string ss;
         for(int i=0;i<n-1;i++)
        {
            scanf("%s = %d",s,&val);
            //ss=s;
            mp[s]=val;
        }
        char str[22];
        int flag=1;
        while(scanf("%s ",str),str[0]!='?')
        {
            if(str[0]=='+')
                flag=1;
            else if(str[0]=='-'&&!isdigit(str[1]))
                flag=-1;
            else if(str[0]=='=')
                continue;
            //printf("flag=%d ",flag);
            if(isalpha(str[0]))
            {
                it=mp.find(str);
                if(it!=mp.end())
                    {
                        if(flag==1)
                            sum+=it->second;
                        else if(flag==-1)
                            sum-=it->second;
                        else
                            sum=sum;
                    }
               // printf("sum=%d ",sum);
            }
            else if(isdigit(str[0]))
            {
                int len=strlen(str);
                int num=0,temp=1;
                for(int i=len-1;i>=0;i--)
                {
                    num+=temp*(str[i]-'0');
                    temp*=10;
                }
                if(flag==1)
                    sum+=num;
                else if(flag==-1)
                    sum-=num;
                else
                    sum=sum;
                 // printf("sum=%d ",sum);
            }
            else if(str[0]=='-'&&isdigit(str[1]))
            {
                int len=strlen(str);
                int num=0,temp=1;
                for(int i=len-1;i>=1;i--)
                {
                    num+=temp*(str[i]-'0');
                    temp*=10;
                }
                num=-num;
                if(flag==1)
                    sum+=num;
                else if(flag==-1)
                    sum-=num;
                else
                    sum=sum;
                     //printf("sum=%d ",sum);
            }
        }
        printf("%d
",sum);

    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/lyf123456/p/3426065.html