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的更多相关文章

  1. 面向对象程序设计第三次作业-Calculator

    题目: 最终代码: Scan.h: Print.h: Calaulator.cpp: 解题过程 看到题目后,在查询之后明白了这是多文件的题目,然后通过翁凯老师的视频讲解知道了.h和.cpp文件的区别和 ...

  2. 程序设计第三次作业---C++计算器雏形

    Github链接:https://github.com/Wasdns/object-oriented 题目:程序设计第三次作业 程序设计第三次作业附加 我的程序设计第三次作业附加 代码规范 更新时间: ...

  3. 程序设计第三次作业--C++计算器初始部分

    面向对象程序设计作业3--C++计算器初始部分 Github 链接:https://github.com/luojingzhao/object-oriented/tree/master/calcula ...

  4. C语言程序设计第三次作业--选择结构(1)

    Deadline: 2017-10-29 22:00 一.学习要点 掌握关系运算符和关系表达式 掌握如何判断两个实数相等 掌握常用数学函数的使用 掌握逻辑运算符和逻辑表达式 理解逻辑运算的短路特性 掌 ...

  5. 浅谈JavaScript的面向对象程序设计(三)

    前面已经对JavaScript的面向对象程序设计作了简单的介绍,包括了对象的属性.对象的工厂模式.构造函数和原型等.通过介绍,这些创建对象的方法依然有不少优化和改进的地方. 组合使用构造函数模式和原型 ...

  6. 《面向对象程序设计》 三 Calculator 计算器初步

    Git传送门 纸上得来终觉浅,绝知此事要躬行. 学习了一些c++的相应知识后,虽然了解写法,真正操作时还是出现小错误.要多操作,记住关键点,避免不该有的小错误. 写分文件类外定义时出现了问题.在Sca ...

  7. C语言程序设计第三次作业

    态度决定一切,无论做什么事情,秉持一个认真的态度,相信一定会让你受益无穷.当提交作业时,如果只是粘贴一下代码和运行结果,那么,你也只是写了一个程序而已,对你自己水平的提升帮助并不大,这次犯的错误或许下 ...

  8. 《面向对象程序设计》第二次作业(1)(A+B问题)

    作业记录: 问题描述与代码已上传github仓库object-oriented文件夹下 题目一览 Calculate a + b and output the sum in standard form ...

  9. C++面向对象程序设计第三章习题答案解析

    整理一下自己写的作业,供考试前复习用,哈哈 进入正题!!! 题目: 2.分析下面的程序,写出其运行时的输出结果 这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释 #inclu ...

随机推荐

  1. Go学习笔记02-基本语法

    目录 变量定义 代码示例 变量定义 内建变量类型 复数回顾 强制类型转换 常量 枚举类型 变量定义 代码示例 package main import "fmt" /* 此处定义的变 ...

  2. vue_表单控件

    Vue.js中提供 v-model 的指令对表单元素进行双向数据绑定,在修改表单元素值的同时,实例 vm 中对应的属性值也同时更新,反之亦然.本小节介绍主要input元素绑定v-model 后的具体用 ...

  3. css给列表添加序号

    .middle ul{ counter-reset: show-list; } li{ padding-left: 30px; line-height: 1.3; position: relative ...

  4. Java面试题以及答案精选(架构师面试题)-基础题1

    基础题 一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?1. String是字符串常量,StringBuffer和StringBu ...

  5. 怎么配置 Oracle 侦听器来使用SQL操作ST_Geometry

    关于这个内容,其实从ArcSDE9.2推出ST_Geometry就让用户感到很有吸引力,而且特别是在ArcSDE9.3之后,用户使用SQL操作ST_geometry越来越多,但是在配置Oracle监听 ...

  6. 用scrapy爬取亚马逊网站项目

    这次爬取亚马逊网站,用到了scrapy,代理池,和中间件: spiders里面: # -*- coding: utf-8 -*- import scrapy from scrapy.http.requ ...

  7. 洛谷P2342-叠积木

    Problem 洛谷P2342-叠积木 Accept: 373   Submit: 1.1k Time Limit: 1000 mSec    Memory Limit : 128MB Problem ...

  8. POJ1419 Graph Coloring

    嘟嘟嘟 求无向图的最大独立集. 有这么一回事:最大独立集=补图的最大团. 所谓的最大团,就是一个子图,满足图中任意两点都有边. 然后ssy巨佬告诉了我一个很没有道理强的做法:随机. 每一次random ...

  9. 分布式服务化系统一致性(分布式事务、ACID、BASE、CAP)原理与解决方案

    https://blog.csdn.net/rickiyeat/article/details/70224722

  10. php 对象数组互转

    数组转对象 function array2object($array) {   if (is_array($array)) {     $obj = new StdClass();     forea ...