• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: C/C++
  • 标签:

资源简介

c++栈写的中缀表达式求解,可以计算包含()、/、*、+、-的表达式的解

资源截图

代码片段和文件信息

#include 
#include “Seqstack.h“
#include 
#include 
char bijiao(char chchar ch1);
double yusuan(double adouble bchar c);
double tiqu(double adouble bchar s[]);
using namespace std;
Seqstack intstack;
Seqstack charstack;
int main()
{
  char str[30];int j=0;
  while(true)
  {

  cout<<“请输入运算表达式“<    cin>>str;
    while(str[j]!=‘\0‘) //循环指向之后一个字符
    {
        j++;
    }
    if(str[j-1]!=‘#‘) //如果最后一个字符不是#
    {
        str[j]=‘#‘;    //在字符串后面加#
        str[j+1]=‘\0‘;
    }

    cout<    charstack.push(‘#‘);//在字符栈里入栈#
    char ch;             //定义字符来保存栈顶的字符
    for(int i=0;str[i]!=‘\0‘;i++)//循环处理字符串的每个字符
    {
       ch=charstack.getTop();
       if(str[i]<=‘9‘&&str[i]>=‘0‘)  //如果是运算符
       {
           int a=i;                            //记录此时i的位置
           while(str[i+1]<=‘9‘&&str[i+1]>=‘0‘) //如果下个字符也是运算数一直循环读取整个数
           {
               i++;
           }
           double temp=tiqu(aistr);      //将读到的字符串转化为整数
           intstack.push(temp);
       }
       else                               //如果不是运算数则一定是运算符
       {
        if(str[i]==‘)‘) //如果是右括号循环判断栈顶是不是左括号
          {
             char s=charstack.getTop();
              while(s!=‘(‘)//如果不是则出栈两个运算数一个运算符运算并将结果入栈
                    {
                        char c=charstack.pop();
                        double a=intstack.pop();
                        double b=intstack.pop();
                        double temp=yusuan(abc);
                        intstack.push(temp);
                        s=charstack.getTop();
                    }
                    charstack.pop();//如果是则将右括号出栈
                    continue;    //处理下个字符
          }

          if(str[i]==‘(‘)  //若果是左括号直接入栈
             {
                 charstack.push(‘(‘);
                 continue;
             }
          if(bijiao(str[i]ch)==‘>‘)//如果该运算符优先级大于栈顶字符的优先级
            {
              charstack.push(str[i]); //入栈
              //ch=str[i];
             // cout<              continue;
          }
          if(bijiao(str[i]ch)==‘<‘)//如果该运算符优先级小于栈顶字符的优先级
          {
              if(ch==‘(‘)//如果此时栈顶字符为左括号

                 {
                  charstack.push(str[i]); //直接入栈
                  continue;
                 }                     //否则出栈两个运算数一个运算符运算并将结果入栈继续处理该字符
              double c=charstack.pop();
              double a=intstack.pop();
              double b=intstack.pop();
              double temp=yusuan(abc);
              intstack.push(temp);
              i--;
              //cout<              continue;
          }

          if(bijiao(str[i]ch)==‘=‘) //如果该运算符等于栈顶字符
          {
              charstack.pop();  //出栈 处理完成
              //cout<              continue;
          }

       }

    }
    //cout<    cout<   //cout<

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-10-27 13:11  中缀表达式求解\
     文件        4870  2013-10-27 13:08  中缀表达式求解\main.cpp
     文件         526  2013-10-21 13:55  中缀表达式求解\Seqstack.h

评论

共有 条评论