当前位置: 首页 > news >正文

网站建设营销方案长沙seo服务哪个公司好

网站建设营销方案,长沙seo服务哪个公司好,wordpress 站中站,荔枝视频在线观看免费最新使用栈来计算后缀表达式的值: 9(3 - 1)*310/2; 后缀表达式:所有的符号都是在运算数字的后面出现: 9 3 1 – 3 * 10 2 / 规则: 中缀表达式转后缀表达式: 1.从左到右遍历中缀表达式的每个数字和符号,若是数字就打印同时入栈数…

使用栈来计算后缀表达式的值:

9+(3 - 1)*3+10/2;

后缀表达式:所有的符号都是在运算数字的后面出现: 9 3 1 – 3 * + 10  2 / +

规则:

中缀表达式转后缀表达式:

1.从左到右遍历中缀表达式的每个数字和符号,若是数字就打印同时入栈数字栈snum;

2.若是左括号,则将其压入运算符栈sope中;

3.若是右括号,则将sope栈顶的运算符弹出并打印,直到遇到左括号(左括号也出栈,但不输出打印);

4.若是运算符,若该运算符的优先级大于栈顶运算符的优先级时,则把它压栈;若小于或等于栈顶运算符优先级时,则将栈顶运算符弹出并打印, 同时出栈snum数字按照此运算符运算后结果入栈,再比较新的栈顶运算符,按同样方法处理,直到该运算符大于栈顶运算符优先级为止,然后将该运算符压栈;

5.若中缀表达式中的各对象处理完毕,则把sope栈中存留的运算符依次弹栈输出打印, 同时取snum中的值按照此运算符运算后的结果入栈,直至sope栈空 。snum栈底元素出栈即为计算结果。

 计算规则:

  • 创建一个双精度数字栈 snum 来存储操作数。Copy
  • 使用 stringstream 将输入字符串 postfix 便于逐个提取 token。
  • 使用 while (ss >> token) 循环来逐个读取 token,直到字符串流结束。每次读取都会跳过空格。
  • 如果 token 的第一个字符是数字(使用 isdigit 函数判断),则将这个 token 转换为 double 类型并推入栈中。
  • 如果 token 不是数字,说明它是一个操作符。
  • 从栈中弹出两个元素(x 和 y),注意:弹出顺序是后进先出(LIFO),所以首先弹出的将是最近进入栈的数字
  • 根据操作符执行相应的数学运算,并将计算结果压入栈中。
  • 针对除法,还需检查除数 y 是否为零,如果是,则抛出异常以避免除以零错误。
  • 最后,函数返回栈顶元素,这个值是后缀表达式的计算结果.

完整代码: 

 

#include <iostream>
#include <string>
#include <exception>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
bool isvalidexpression(const string & expression)
{
    for (char ch : expression)
    {
        if (!isdigit(ch) && ch != '+' && ch != '-' && ch != '*' && ch != '/' && ch != ' ')
        {
            return false;
        }
    }
    return true;
}

int precedence(char ch)
{
    switch (ch)
    {
    case '+':
    case'-':
        return 1;
    case '*':
    case '/':
        return 2;
    default:
        return 0;

    }
}

string infixtopostfix(const string& expression)
{
    stack<char> sope;//字符栈
    string postfix = "";//后缀表达式
    string numbuff = "";
    for (size_t i = 0; i < expression.length(); i++)
    {
        char ch = expression[i];
        if (isdigit(ch))
        {
            numbuff += ch;
        }
        else
        {
            if (!numbuff.empty())
            {
                postfix += numbuff;
                postfix += ' ';
                numbuff.clear();
            }


            if (ch == '(')
            {
                sope.push(ch);
            }
            else if (ch == ')')
            {
                while (!sope.empty() && sope.top() != '(')
                {
                    postfix += sope.top();
                    postfix += ' ';
                    sope.pop();
                }
                sope.pop();//出栈'('
            }
            else
            {
                while (!sope.empty() && precedence(sope.top()) >= precedence(ch))
                {
                    postfix += sope.top();
                    postfix += ' ';
                    sope.pop();
                }
                sope.push(ch);
            }
        }
    }
    if (!numbuff.empty())
    {
        postfix += numbuff;
        postfix += ' ';
    }
    while (!sope.empty())
    {
        postfix += sope.top();
        postfix += ' ';
        sope.pop();
    }

    if (!postfix.empty() && postfix.back() == ' ')
    {
        postfix.pop_back();
    }
    return postfix;

}

double evaluatepostfix(const string& postfix)
{
    stack<double>snum;//数字栈
    stringstream ss(postfix);
    string token;
    while (ss >> token)
    {
        if (isdigit(token[0]))
        {
     snum.push(stod(token));//stod 是一个函数,用于将字符串转换为 double 类型的浮点数。
        }
        else
        {
            double x = snum.top(); snum.pop();
            double y = snum.top(); snum.pop();
            switch (token[0])
            {
            case '+':snum.push(x + y); break;
            case'-':snum.push(x - y); break;
            case '*':snum.push(x * y); break;
            case '/':if (y != 0)
            {
                snum.push(x / y);
            }
                    else
            {
                throw runtime_error("Error:Division By Zero");
            }
                    break;
                
            }
        }
    }

    return snum.top();


}

int main()
{
    //输入一个表达式
    string expression;
    cout << "请输入一个算数表达式:(例如2*3*(4+5))" << endl;
    getline(cin , expression);

    //检测有效性
    if (!isvalidexpression(expression))
    {
        cout << "表达式不合法" << endl;
    }
    //将中缀表达式转换为后缀表达式
    string postfix = infixtopostfix(expression);
    cout << "后缀表达式是:"<<postfix << endl;

    //计算后缀表达式的值
    
    try
    {
        double result = evaluatepostfix(postfix);
        cout << "后缀表达式的结果为:" << result << endl;
     }
    catch (runtime_error& e)
    {
        cout << e.what() << endl;
    }

    system("pause");
    return 0;
}

http://www.hkea.cn/news/771827/

相关文章:

  • wordpress写软文赚钱seo快速培训
  • 南宁网站建设接单陕西省人民政府
  • wordpress网站价格seo域名综合查询
  • 支付网站怎么做的网络自动推广软件
  • js做网站统计品牌关键词优化
  • 微信公众号管理平台官网谷歌seo建站
  • 鲜花购物网站源码企业网站营销的优缺点
  • 表白网站制作在线日照网站优化公司
  • 企业网站建设策划书 前言徐州关键词优化排名
  • 一级a做爰片视频网站全国新闻媒体发稿平台
  • 唐山网站建设哪家专业高德北斗导航
  • wordpress 地址 .html企业网站seo贵不贵
  • 提供网站制作公司哪家好网络软文范文
  • 做原型网站枣庄网络推广seo
  • 品牌网站开发设计外贸网站平台
  • 网站做留言板网站推广在线
  • 长春服务好的网络营销seo网站推广的主要目的
  • 搜索引擎优化和关键词竞价广告的区别宿州百度seo排名软件
  • 一搜同志网站建设电话青岛网站seo优化
  • 官方做任务网站网络营销公司注册找哪家
  • django做视频网站网络营销推广专家
  • 国外手做网站搜索引擎推广的关键词
  • 网站建设商标注册多少类目域名注册免费
  • 哪里有网站设计公司长沙网络公司最新消息
  • 试描述一下网站建设的基本流程百度怎么发布短视频
  • 我现在有域名怎么做网站搜索关键词热度
  • 海外如何 淘宝网站建设快速seo整站优化排行
  • 代还信用卡网站建设赣州seo顾问
  • 响应式网站建设推广开网店
  • 成都专业网站推广公司优化大师优化项目有