《面向对象程序设计》第三次作业 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 ...
随机推荐
- Go学习笔记02-基本语法
目录 变量定义 代码示例 变量定义 内建变量类型 复数回顾 强制类型转换 常量 枚举类型 变量定义 代码示例 package main import "fmt" /* 此处定义的变 ...
- vue_表单控件
Vue.js中提供 v-model 的指令对表单元素进行双向数据绑定,在修改表单元素值的同时,实例 vm 中对应的属性值也同时更新,反之亦然.本小节介绍主要input元素绑定v-model 后的具体用 ...
- css给列表添加序号
.middle ul{ counter-reset: show-list; } li{ padding-left: 30px; line-height: 1.3; position: relative ...
- Java面试题以及答案精选(架构师面试题)-基础题1
基础题 一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?1. String是字符串常量,StringBuffer和StringBu ...
- 怎么配置 Oracle 侦听器来使用SQL操作ST_Geometry
关于这个内容,其实从ArcSDE9.2推出ST_Geometry就让用户感到很有吸引力,而且特别是在ArcSDE9.3之后,用户使用SQL操作ST_geometry越来越多,但是在配置Oracle监听 ...
- 用scrapy爬取亚马逊网站项目
这次爬取亚马逊网站,用到了scrapy,代理池,和中间件: spiders里面: # -*- coding: utf-8 -*- import scrapy from scrapy.http.requ ...
- 洛谷P2342-叠积木
Problem 洛谷P2342-叠积木 Accept: 373 Submit: 1.1k Time Limit: 1000 mSec Memory Limit : 128MB Problem ...
- POJ1419 Graph Coloring
嘟嘟嘟 求无向图的最大独立集. 有这么一回事:最大独立集=补图的最大团. 所谓的最大团,就是一个子图,满足图中任意两点都有边. 然后ssy巨佬告诉了我一个很没有道理强的做法:随机. 每一次random ...
- 分布式服务化系统一致性(分布式事务、ACID、BASE、CAP)原理与解决方案
https://blog.csdn.net/rickiyeat/article/details/70224722
- php 对象数组互转
数组转对象 function array2object($array) { if (is_array($array)) { $obj = new StdClass(); forea ...