首页 > 其他分享 >四则运算

四则运算

时间:2023-11-11 10:01:08浏览次数:37  
标签:case obj3 obj2 return 四则运算 char 括号

#include <iostream>
#include<stack>
#include<deque>
#include<string>
using namespace std;
//C++混合四则运算
int pri(char c)//标识运算符优先级
{
    switch(c)
    {
        case '+':
        case '-':return 0;break;
 
        case '*':
        case '/':
        case '%':return 1;break;
 
        case '('://基本上用不到括号的优先级判断
        case ')':return -1;break;
    }
}
 
bool ispunc(char c)//判断是否为括号
{
    if(c=='('||c==')') return true;
    else return false;
}
 
void check(char c,stack<char>&obj2,deque<char>&obj3)//当obj1中出列的是运算符时,判断优先级顺序,将运算符入列obj3.
{
    if(obj2.empty())
    {
        obj2.push(c);
        return ;
    }
    if(ispunc(c))//如果是括号
    {
       if(c=='(') obj2.push(c);//如果是左括号直接压栈
       else{
            while(obj2.top()!='(')//如果是右括号,则出栈obj2直到遇见左括号为止,匹配括号
            {
               obj3.push_back(obj2.top());
               obj2.pop();
            }
             obj2.pop();//知道括号是不入队列obj3的(也就是说括号不存在后序序列的)
           }
    }
    else
    {
       if(pri(c)<=pri(obj2.top())) //如果不是括号,判断它与栈顶运算符的优先级优先级高入栈,否 
       {                                                 // 则出栈
          obj3.push_back(obj2.top());
          obj2.pop();
          check(c,obj2,obj3);
       }
        else obj2.push(c);
    }
}
 
void transf(deque<char>&obj1,stack<char>&obj2,deque<char>&obj3)
{
    while(!obj1.empty()) //利用栈obj2来将中序序列转换为后序序列obj3
    {
         char temp=obj1.front();
         obj1.pop_front();
         if(temp>='0'&&temp<='9')
         {
             obj3.push_back(temp);
         }
         else
            check(temp,obj2,obj3);
    }
    while(!obj2.empty())
    {
        obj3.push_back(obj2.top());
        obj2.pop();
    }
}
 
void calcu(deque<char>&obj3)//利用逆波兰表达式求值
{
    stack<int>temp;
    while(!obj3.empty())
    {
        char fc=obj3.front();
        obj3.pop_front();
        if(fc>='0'&&fc<='9') temp.push(fc-'0');//遇见数字入栈
        else  //遇见运算符,取出栈顶两个元素(与运算符操作数匹配,如果带有负号那么则取出一个)
        {
            int one=temp.top();
            temp.pop();
            int two=temp.top();
            temp.pop();
            switch(fc) //将运算后的结果压入栈中
            {
                case '+':{temp.push(two+one);break;}//注意操作数two在前
                case '-':{temp.push(two-one);break;}
                case '*':{temp.push(two*one);break;}
                case '/':{temp.push(two/one);break;}
                case '%':{temp.push(two%one);break;}
            }
        }
    }
    cout<<"The result is:"<<temp.top()<<endl;//取最后栈中唯一元素作为运算结果
    temp.pop();
}
 
int main()
{
    stack<char>obj2;
    deque<char>obj1,obj3;
    string str;
    cin>>str;
        for(int i=0;i<str.size();++i)
            obj1.push_back(str.at(i));
    transf(obj1,obj2,obj3);
    calcu(obj3);
    return 0;
}

 

标签:case,obj3,obj2,return,四则运算,char,括号
From: https://www.cnblogs.com/guoliheng/p/17825549.html

相关文章

  • 实现一个自动生成小学四则运算题目的命令行程序
    作业所属课程https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13016作业要求https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13016作业目标实现一个自动生成小学四则运算题目的命令行程序结对项目艾山·依力哈木+3120005145一......
  • 强制类型转换的优先级高于四则运算的优先级
    ////Createdby王东梁on2023/9/14.//#include<stdio.h>intmain(){doublea=3.0;doubleb=2.0;//强制类型转换的优先级高于四则运算的优先级doublei=(int)a/b;doublej=(int)(a/b);printf("%f%f",i,j);return0;}......
  • 结对项目,用C++实现的四则运算
    软件工程计科一班陈倚星-3119000414,甫尔达吾斯.吐拉江-3119000416作业要求与班上同学组队完成项目作业目的提高合作与团队意识GitHub链接https://github.com/xingch123456789/my_appPSP表格PSP2.1PersonalSoftwareProcessStages预估耗时(分钟......
  • 结对项目:用C++实现四则运算
    软工作业3:自动生成小学四则运算题目的命令行程序这个作业属于哪个课程计科21级12班这个作业要求在哪里结对项目这个作业的目标熟悉合作开发流程项目Github点击这里团队成员姓名学号石云欣3221004809沈纪康3121004750PSP表PSP2.......
  • 结对项目:python开发四则运算的程序
    项目链接软件工程软件工程链接作业要求作业要求的链接作业目标两人用python实现一个自动生成小学四则运算题目的命令行程序github项目链接github项目链接团队成员姓名学号李金强3121004868赵继业31210048901.PSP表格PSP表格通常用......
  • 结对项目:自动生成小学四则运算题目
    用Python实现一个自动生成小学四则运算题目的命令行程序 软件工程计科21级12班(广东工业大学-计算机学院)作业要求结对项目作业目标熟悉结对编程 成员姓名班级学号黄翼山计算机科学与技术2021级2班3119004783扎恩哈尔·吾兰计算机科学......
  • 结对项目:用Python实现自动生成小学四则运算题目的程序
    Python实现四则运算程序软件工程计科21级1.2班作业要求https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13016作业目标完成结对项目:四则运算;熟悉团队协作的方法和模式github链接:https://github.com/howdnb/howdnb项目成员信息姓名学号......
  • 结对项目:实现一个自动生成小学四则运算题目的命令行程序
    1作业摘要与结对伙伴介绍1.1作业摘要这个作业属于哪个课程所属课程链接这个作业要求在哪里作业要求链接这个作业的目标<熟悉软件工程流程,把握PSP流程框架,精进测试代码和性能改进的能力>Github链接1.2结对伙伴信息姓名学号彭学智3121004878......
  • 结对项目:Java实现自动生成小学四则运算题目
    结队项目软件工程所在班级队伍成员谢昊天(3121004672)林育鑫(3121004660)作业要求[要求](([个人项目-作业-计科21级12班-班级博客-博客园(cnblogs.com)](结对项目-作业-计科21级12班-班级博客-博客园(cnblogs.com))))作业目标实现一个自动生成......
  • 实现自动生成小学四则运算题目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade21-12这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13016这个作业的目标结对项目GitHub链接1.PSP表格PSP2.1PersionalSoftwareProcessStages预估......