C++程序设计(PEARSON版)第三版12.18答案

c++程序设计读书笔记(梁勇版) 第一部分 程序设计基础 第一章 计算机、程序和C++语言简介 第二章 基本数据类型和计算 第三章 分支语句 第四章 循环 第五章 函数 第六章 数组 第七章 指针和C字符串 第八章 递归 第二部分 面向对象程序设计 第九章 对象和类 第十章 对象和类的更多内容 第十一章 继承和多态 第十二章 文件输入和输出 第十三章 运算符重载 第十四章 异常处理 第三部分 数据结构 第十五章 模板 第十六章 ... 阅读详情

**12.18(中序转后序)string infixTopostfix(const string&expression)

例如:该函数把中序表达式转换为后续表达式,“(1+2)*3”转换为“12+3*”,把“2*(1+3)”转换为“213+* ”。

对于函数及代码原理的详细解读大家可以看下我的另一篇博客:https://blog.youkuaiyun.com/CHINA_CNN/article/details/89343179

这是这道题的运行截图:

需要特别注意的是:一定一定要注意代码里的括号是英文状态下的,所以输入的时候要输英文状态下的括号才能出正常结果

大家如果有兴趣也可以把下面给出的代码再完善下,为中文括号添加条件,不过下面的代码已经实现题目的要求,因为题目本身是在英文状态下的。

下面直接上这篇作业的代码

以下代码在VS2017上获得通过!

#include "pch.h"
#include <iostream>
#include<string>
#include<vector>
using namespace std;
int pr(char ch)
{
	if (ch == '*' || ch == '/')
		return 1;
	if (ch == '+' || ch == '-')
		return 0;
	if (ch == '(')
		return -1;
	else
		return -2;
}
string infixTopostfix(const string&expression)
{
	int t1 = 0, t2 = 0;
	vector<char>ITP;
	string backup,a;
	a = expression;
	for (unsigned int i = 0; i < a.length(); i++)
	{
		if (a[i] >= '0'&&a[i] <= '9')
			backup+=a[i];
		else if (a[i] == '(')
			ITP.push_back(a[i]);
		else if (a[i] == ')')
		{
			while (ITP.back() != '(' && !ITP.empty())//vetor.at(vetor.size() - 1)
			{
				backup+=ITP.at(ITP.size() - 1);
				ITP.pop_back();
			}
		}
		else if (a[i] == '+' || a[i] == '-' || a[i] == '*' || a[i] == '/')
		{
			if (!ITP.empty() && (ITP.at(ITP.size() - 1) == '+'
				|| ITP.at(ITP.size() - 1) == '-' ||
				ITP.at(ITP.size() - 1) == '*' ||
				ITP.at(ITP.size() - 1) == '/'))//这样保证刚开始时进来的和顶上的全是运算元
			{
				t1 = pr(a[i]);
				t2 = pr(ITP.at(ITP.size() - 1));
				if (t2 == -2)//
				{
					//cout << "System mistake!" << endl;
					return "System mistake!";
				}
				else if (t2 >= t1)
				{
					while (!ITP.empty())//&&ITP.back()!='(')//&& ITP.at(ITP.size() - 1) != '(')
					{
						t1 = pr(a[i]);
						t2 = pr(ITP.at(ITP.size() - 1));
						if (ITP.back() != '('&&t2 >= t1)
						{
							backup+= ITP.at(ITP.size() - 1);
							ITP.pop_back();
						}
						else if (t2 < t1)//防止这个a[i]可能入栈失败
						{
							ITP.push_back(a[i]);
							break;
						}
						else if (ITP.back() == '(')
						{
							ITP.push_back(a[i]);
							break;
						}
					}
					if (ITP.empty())
					{
						ITP.push_back(a[i]);
					}

				}
				else
				{
					ITP.push_back(a[i]);
				}
			}
			else
			{
				ITP.push_back(a[i]);
			}
		}
	}
	while (!ITP.empty())
	{
		//cout <<" "<< ITP.back() << endl;
		//ITP.pop_back();
		if (ITP.back() != '(')
		{
			backup+= ITP.at(ITP.size() - 1);
			ITP.pop_back();
		}
		else if (ITP.back() == '(')
		{
			ITP.pop_back();
		}
	}
	return backup;
}
int main()
{
	
	
	string b;
	cout << "中序表达式:";
	cin >> b;
	cout<<"后序表达式:"<<infixTopostfix(b)<<endl;
	cout << "中序表达式";
	cout << "后序表达式:";
	cin >> b;
	cout << "后序表达式:" << infixTopostfix(b) << endl;



	return 0;
}


 

 

《C++程序设计》 Y.Daniel Liang著 课后一百题 河大计算机院学生c++学习上学期课后100题作业,有需求可以私信我,我会私下免费发。 阅读详情

相关推荐

C++程序设计教程(第三版)朱红 赵琦 课后习题答案

C++程序设计教程(第三版)朱红 赵琦 课后习题答案

C++程序设计教程 第3版——习题第五章13-16

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言这是第五章13-16题的代码解答一、题目二、代码解答1.13-1614题简化版 前言 提示:这里可以添加本文要记录的大概内容: 这是第五章13-16题的代码解答 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目 二、代码解答 1.13-16 代码如下(示例): 13.#include<iostream> using namespace std; float p(int n,int x) { float.

XLYcmy的博客 553

C++程序设计教程课后习题答案【钱能】

C++程序设计教程课后习题答案【钱能】清华版~~~~~~~~~~~

C++程序设计(第三版)谭浩强 第五章课后习题答案

8.有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。例如,原来顺序为8,6,5,4,1。要求改为1, 4,5, 6,8。7.找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)。(1)用字符数组,不用 strcat函数(即自己写一个具有strcat函数功能的函数)16.输入一个字符串,将其中的字符按逆序输出,如输入LIGHT,输出THGIL。4.求一个己排好序的数组,输入一个数,要求按原来排序的规律将它插入数组中。

坏男孩! 1797

C++程序设计第三版课后习题答案

C++第三版习题答案,作为参考,希望各位序号C++

【Python爬虫案例教学】超简洁代码采集原神所有角色信息

(。・∀・)ノ゙嗨 大家好,这里是池鱼

xiaoyuan_____的博客 2421

C++程序设计(第三版)谭浩强 第四章课后习题答案

7.写一个函数验证哥德巴赫猜想:一个不小于6的偶数可以表示两个素数之和,如6=3+3,8=3+5,10=3+7,……,在主函数中输入一个不小于6的偶数n,然后调用函数gotbaha,在gotbaha函数中再调用prime函数,prime函数的作用是判别一个数是否为素数。系数a,b,c,d的值依次为1,2,3,4,由主函数输入。求x在1附近的实根。2.求方程ax²+bx+c=0的根,用3个函数分别求当b²-4ac大于0、等于0和小于0的根,并输出结果。a,b,c的值由主函数输入,最终得到的值在主函数中输出。

坏男孩! 1341

从音频录制到智能手表:Sigma-Delta ADC是如何在低功耗场景下‘欺骗’噪声的?

本文深入解析Sigma-Delta ADC在智能穿戴设备中的低功耗高精度实现原理,重点介绍其通过过采样和噪声整形技术‘欺骗’噪声的独特方法。以TWS耳机和医疗级健康监测为例,展示该技术如何在有限功耗预算下实现专业级信号采集,为消费电子设计提供关键解决方案。

weixin_30825581的博客 389

C++程序设计(第3版)谭浩强 课后习题答案合集

C++程序设计(第3版)谭浩强 课后习题答案合集

坏男孩! 1455

GD32H7 SPI驱动实战:手把手教你用SPI3连接外部Flash(W25Q128)并实现读写

本文详细介绍了基于GD32H7系列MCU的SPI3接口驱动W25Q128外部Flash的全流程开发指南。从硬件设计、引脚配置到SPI3外设深度配置,再到底层通信函数实现和高级功能优化,提供了完整的解决方案。特别针对高速读取、DMA传输和信号完整性等关键环节进行了优化,确保系统在-40℃~85℃范围内稳定工作。

weixin_28729205的博客 381

C++程序设计(第三版)谭浩强 第六章课后习题答案

C++程序设计(第三版)谭浩强 第六章课后习题答案

坏男孩! 1483

IB网络下不同租户业务隔离方案

IB(InfiniBand)网络隔离可以在不同的通信模式下实现,其中包括 IPoIB(IP over InfiniBand)通信模式。在 IPoIB 模式下,InfiniBand 网络可以承载 IP 数据包,使得基于 IP 的应用程序能够在 InfiniBand 网络上进行通信。在这种情况下,IB 网络隔离通常指通过配置 Partition Key(PKey)来实现不同的租户或应用程序之间的网络隔离。然而,IB 网络隔离并不仅限于 IPoIB 模式。

guganly的专栏 1528

C++程序设计教程 第3版——习题九9-10

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、题目二、代码解答910. 一、题目 二、代码解答 9 代码如下(示例): #include<iostream> using namespace std; void filter(char*p) { char a[100]={0}; int i,j=0; for(i=0;p[i]!='\0';i++) { if((p[i]>='A'&&p[i]<='Z')||(p[i]&.

XLYcmy的博客 797

[原创]Linux 802.11n CSI tool Monitor模式

Linux 802.11n CSI tool Monitor模式 使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式可以调制发送速率、发包数量、发送天线个数、HT模式、short/long guard interval等等,因此调通Monitor模式是必须的。期间参考了博主沃一德的CSI Tool安装使用讲解,对他的工作表示感...

u014645508的博客 1万+

Python爬虫实战:高效爬取中国专利数据库的完整指南

在当今信息爆炸的时代,专利数据作为技术创新的重要指标,对企业研发、市场分析和学术研究都具有极高价值。中国作为全球专利申请量最大的国家,其专利数据库包含了海量的技术创新信息。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的中国专利数据库爬虫系统。中国专利数据库主要由国家知识产权局(CNIPA)维护,包含发明专利、实用新型专利和外观设计专利三大类。截至2023年,中国专利数据库已收录超过400万件发明专利和300万件实用新型专利。

2201_76125261的博客 1573

c++ 程序设计 第三版 课后习题

c++ 程序设计 第三版 课后习题

pangxing6491的博客 544

贪婪投影三角化算法

贪婪投影三角化算法是一种利用点云数据进行曲面重建的方法。其基本思想是通过迭代地连接点云中的邻近点来生成三角形,从而构建出整个表面。这种方法被称为“贪婪”,因为它在每一步仅考虑当前最优的策略,而不考虑全局的最优性。

twnkie的博客 1567

钱能c++程序设计教程(第3版)通用版课后习题--5.1 改写ch4_8

将ch4_8.cpp的程序(如下)改写为主函数调用isprime()函数的形式,以确定该数是否为素数。

HERENOW47的博客 369

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

钱能c++程序设计教程(第3版)通用版课后习题--4.1 计算级数

【代码】钱能c++程序设计教程(第3版)通用版课后习题--4.1 计算级数。

HERENOW47的博客 913

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C++程序设计教程 第3版——习题十五

C++程序设计教程 第3版——习题十五

XLYcmy的博客 979

C++程序设计试题及答案解析(二)

C++程序设计模拟试卷(二) 一、单项选择题 1. 静态成员函数没有() A. 返回值 B. this指针 C. 指针参数 D. 返回类型 答案:B 解析:(P107)静态成员函数是普通的函数前加入static,它具有函数的所有的特征:返回类型、 形参,所以使用(P107)静态成员函数,指针可以作为形参,也具有返回值。静态成员是类具有的 属性,不是对象的特征,而this表示的是隐藏的对象的指针,因此静态成员函数没有this 指针 。静态成员函数当在类外定义时,要注意不能使用static

MrLuo8的博客 8728

C++程序设计(第3版)谭浩强 第1章 习题

C++程序设计(第3版)谭浩强 第1章 习题 学习笔记,记录学习内容

FlightSim的博客 774

钱能c++程序设计教程(第3版)通用版课后习题--4.4 求完数

所谓“完数”就是指一个数恰好等于它的因子之和;例如:6是完数,6=1+2+3;

HERENOW47的博客 856

C++程序设计(PEARSON版)第三版11.7答案

题目描述(商业ATM机) Project2:ATM machine Problem Description: Design and implement a class named Account that contains: An int data field named idfor the account. A double data field named balancefor...

CHINA_CNN的博客 2118

C++程序设计教程 第3版——习题,第八章习题解答(有关宏定义的一些解答)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、题目二、代码解答1.1-4的代码解答2.5-8的代码解答 前言 有关宏的问题的一些解答 一、题目 二、代码解答 1.1-4的代码解答 代码如下(示例): 1.#include<iostream> #include<iomanip> using namespace std; struct student { int num; char name[20]; float score; }; s.

XLYcmy的博客 2449
上一篇: 中序转后序代码详解以及实现(C++)
下一篇: C++程序设计(PEARSON版)第三版13.1答案
报的算无敌
博客等级 码龄12年 300粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值