《面向对象程序设计》第三次作业 Calculator
c++第三次作业 Calculator
git上的作业展示点这里。
ps:有一点不是很明确,作业要求:将数字和符号提取出来,得到一组string,然后才将这些string存入队列中。按我的理解是需要将每一个部分都先存在一个string数组里,这样显得很冗余也有点古怪,因此我直接讲string分出来后存在队列中。如果诸位大神有更新的见解,跪求指点。
Scan.hpp
#ifndef Scan_hpp
#define Scan_hpp
#include <iostream>
#include <queue>
#include <string>
using namespace std;
class Scan
{
private:
//用于接收键盘输入的四则运算表达式
string input;
string charString;
public:
queue<string> ToStringQueue(string input);
//判断数字是否过大用的标记
bool tooBig;
};
#endif
Scan.cpp
#include "Scan.hpp"
#include <iostream>
#include <queue>
#include <string>
using namespace std;
queue<string> Scan::ToStringQueue(string input){
tooBig = false;
//计算数字位数的字符串
int count=0;
//用于组合数字或符号的字符串
string item = "";
std::queue<string> charQueue;
for (int i=0; i<input.length(); i++)
{
//是符号则先将组合好的数字压入队列然后才压入符号
if(input[i]=='+' || input[i]=='-'|| input[i]=='*' || input[i]=='/' || input[i]=='(' || input[i]==')' )
{
if(!item.empty()){
charQueue.push(item);
}
item.clear();
count = 0;
item = input[i];
charQueue.push(item);
item.clear();
}
//组合数字的过程里计算位数,注意:小数点不要计入位数中!
else if((input[i] >= 48 && input[i] <=57) || input[i] == '.' )
{
item += input[i];
if(input[i] != '.'){
count++;
}
if (count >= 10) {
tooBig = true;
}
}
}
//如果最后一个字符是数字则要记住将其压入
if(!item.empty())
{
charQueue.push(item);
}
return charQueue;
}
Print.hpp
#ifndef Print_hpp
#define Print_hpp
#include <iostream>
#include <queue>
#include <string>
using namespace std;
class Print
{
public:
void printString(queue<string> charQueue);
};
#endif
Print.cpp
#include "Print.hpp"
#include <iostream>
#include <queue>
#include <string>
void Print::printString(queue<string> charQueue)
{
//从队列头输出字符串,然后取出已完成输出的字符串,直到结束
while (!charQueue.empty()) {
cout << charQueue.front() << endl;
charQueue.pop();
}
}
main.cpp
#include <iostream>
#include <queue>
#include <string>
#include "Print.hpp"
#include "Scan.hpp"
using namespace std;
int main() {
string input;
Scan m_scan;
getline(cin,input);
//先执行一次函数来计算布尔值决定下一步
m_scan.ToStringQueue(input);
//有出现大于10位数的数字则报错,没有就输出队列
if(m_scan.tooBig)
{
cout << "Error!Number not conform to the requirement.";
}
else
{
class Print pr;
pr.printString(m_scan.ToStringQueue(input));
}
return 0;
}
数据检测


ps:看视频比看书效率高、有意思,不要问我怎么知道的……
《面向对象程序设计》第三次作业 Calculator的更多相关文章
- 面向对象程序设计第三次作业-Calculator
题目: 最终代码: Scan.h: Print.h: Calaulator.cpp: 解题过程 看到题目后,在查询之后明白了这是多文件的题目,然后通过翁凯老师的视频讲解知道了.h和.cpp文件的区别和 ...
- 程序设计第三次作业---C++计算器雏形
Github链接:https://github.com/Wasdns/object-oriented 题目:程序设计第三次作业 程序设计第三次作业附加 我的程序设计第三次作业附加 代码规范 更新时间: ...
- 程序设计第三次作业--C++计算器初始部分
面向对象程序设计作业3--C++计算器初始部分 Github 链接:https://github.com/luojingzhao/object-oriented/tree/master/calcula ...
- C语言程序设计第三次作业--选择结构(1)
Deadline: 2017-10-29 22:00 一.学习要点 掌握关系运算符和关系表达式 掌握如何判断两个实数相等 掌握常用数学函数的使用 掌握逻辑运算符和逻辑表达式 理解逻辑运算的短路特性 掌 ...
- 浅谈JavaScript的面向对象程序设计(三)
前面已经对JavaScript的面向对象程序设计作了简单的介绍,包括了对象的属性.对象的工厂模式.构造函数和原型等.通过介绍,这些创建对象的方法依然有不少优化和改进的地方. 组合使用构造函数模式和原型 ...
- 《面向对象程序设计》 三 Calculator 计算器初步
Git传送门 纸上得来终觉浅,绝知此事要躬行. 学习了一些c++的相应知识后,虽然了解写法,真正操作时还是出现小错误.要多操作,记住关键点,避免不该有的小错误. 写分文件类外定义时出现了问题.在Sca ...
- C语言程序设计第三次作业
态度决定一切,无论做什么事情,秉持一个认真的态度,相信一定会让你受益无穷.当提交作业时,如果只是粘贴一下代码和运行结果,那么,你也只是写了一个程序而已,对你自己水平的提升帮助并不大,这次犯的错误或许下 ...
- 《面向对象程序设计》第二次作业(1)(A+B问题)
作业记录: 问题描述与代码已上传github仓库object-oriented文件夹下 题目一览 Calculate a + b and output the sum in standard form ...
- C++面向对象程序设计第三章习题答案解析
整理一下自己写的作业,供考试前复习用,哈哈 进入正题!!! 题目: 2.分析下面的程序,写出其运行时的输出结果 这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释 #inclu ...
随机推荐
- 建立标准编码规则(一)-自定义C#代码分析器
1.下载Roslyn的Visual Studio分析器模板插件(VS2015 或VS2017) https://marketplace.visualstudio.com/items?itemName= ...
- (下一篇博客)提示5G信道
原本注册这个博客是要不定期更新一些产品的测试内容的 但由于一些个人原因并没有坚持去做到, 每次有点子的时候却没能来得及记下来导致很内容的缺失 接下来将关键点以图片形式 和一些摘要形式先发上来, 已做备 ...
- 关于解决Python中requests模块在PyCharm工具中导入问题
问题引入: 今天在学习Python网络请求的时候,导入requests模块时一直报红色波浪线,如图: 反复折腾,一直以为自己没有安装requests模块,反复安装反复卸载: 安装方法: 首先 cd 进 ...
- ByteArrayInputStream与ByteArrayOutputStream_操作数组的流
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- Android AbsListView Abs前缀
Android AbsListView Abs abstract:抽象
- golang []byte和string相互转换
测试例子 package main import ( "fmt" ) func main() { str2 := "hello" ...
- 理解WebSocket心跳及重连机制(五)
理解WebSocket心跳及重连机制 在使用websocket的过程中,有时候会遇到网络断开的情况,但是在网络断开的时候服务器端并没有触发onclose的事件.这样会有:服务器会继续向客户端发送多余的 ...
- harbor Configuring Harbor with HTTPS Access
首先,下载fq (fanqiang) harbor-offline-installer-v1.2.0-rc5.tgz tar xvf harbor-offline-installer-<vers ...
- java中使用jxl读取excel中的数据
package bboss; import java.io.File; import java.io.FileInputStream; import java.io.IOException; impo ...
- NOIP2002-2017提高组题解
给个人认为比较难的题目打上'*' NOIP2002(clear) //一个很吼的贪心题,将平均数减掉之后从左往右将影响消除 #include<bits/stdc++.h> using na ...