面向对象程序设计作业3--C++计算器初始部分

Github 链接:https://github.com/luojingzhao/object-oriented/tree/master/calculate

本次作业要求

因为是第一次遇到关于C++的题目,当第一次看到这个作业的时候,整个人就是蒙了。自己学习C++刚刚学到Scan,本来对Scan就没什么深刻的概念。而作业却更深的要求我们要使用队列的模板函数。在班群上有同学问慕课网的哪些课程要学完才能完成作业,于是我跟着学长的提示,完成了未看完的相关视频。于是,我尝试着进行了第一次尝试。


尝试

首先在使用DEV-C++建立project的时候就遇到了困难,这让我费了一下午的时间。

一开始不懂的,一直选择Windows Application,然后将慕课网上的代码示例敲进去根本运行不了。在请教了同样学计算机的表哥后,才发现自己愚蠢的错误。

克服了第一个难关后,我花了几天的时间写好了代码:

代码

main.cpp

#include <iostream>
#include<stdlib.h>
#include<string>
#include<queue>
#include"calculate.h"
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv)
{
Dispose *p=new Dispose(); //申请内存
Print *t=new Print(); //申请内存
string _input, strGetInputRet;
cin>>_input;
p->setinput(_input);
strGetInputRet = p->getinput();
p->ToStringQueue(strGetInputRet);
t->output();
delete p; //释放内存 ,并使其指向空指针
p=NULL;
delete t;
t=NULL;
return 0;
}

calculate.cpp

#include<iostream>
#include<stdlib.h>
#include<string>
#include<queue>
#include"calculate.h"
using namespace std; queue<string>data; //定义队列的类型并实例化
string str; //实例化string类型
int count; //用来数输入的数的位数 void Dispose::setinput(string &_input)
{
input=_input;
} string Dispose::getinput()
{
return input;
} void Dispose::ToStringQueue(string &input)
{
int n=input.length();
int i;
for(i=0;i<n;i++)
{
if(count>10)
{
cout<<"Error"<<endl;
break;
}
else if(input[i]=='+'||input[i]=='-'||input[i]=='*'
||input[i]=='/'||input[i]=='='||input[i]=='('||input[i]==')')
{
count=0; //将位数归零
data.push(str); //将之前的数存入
str.clear();
str=input[i]; //将符号再次存入
data.push(str);
str.clear();
}
else if(count<=10)
{
count++; //计数
str+=input[i];
}
} if(count<=10)
{
data.push(str); //处理若末尾是未超过的数的输出
str.clear();
}
} void Print::output()
{
if(count<=10)
{
while(data.empty()==0)
{
cout<<data.front()<<endl;
data.pop();
}
}
}

calculate.h

#include<iostream>
#include<stdlib.h>
#include<string>
#include<queue>
using namespace std; class Dispose
{
public:
void setinput(string &_input); //函数的封装
string getinput();
void ToStringQueue(string &input); //主要的处理函数
private:
string input;
}; class Print
{
public:
void output();
};

遇到的困难

<1>首先对queue的模板函数并不是很了解,于是我查找了网上相关的资料:C++ STL--stack/queue 的使用方法百度百科--queue,大概掌握了queue的基本的用法。

<2>其次在对string的使用上只局限于慕课网上的string字符的相加啊,并不了解string中函数的用法。于是在我开始的void Dispose::ToStringQueue(string &input)的代码书写上想不到用什么来进行对作业要求“当输入的数字超过10位(包括小数位)时,报错”进条件限制。询问了同学和表哥后,发现string函数可以向数组那样挨个地访问。我也查找了网上的相关的资料

<3> if(count<=10) { data.push(str); //处理若末尾是未超过的数的输出 str.clear(); }

这个是处理判断尾数若不是运算符并且未超过10位的数的代码。在我第一次写代码的时候,并没有注意到要考虑这样的情况。但在输入数据100*2=200的时候,运行的时候没有打印出200


于是我查找了代码,发现在最后一次的count位数的时候,就忘记了输出最后一位数。

体会和感受

从一个什么也不懂的c++小白,到现在的略懂一点的小白。(哈哈,我也只能这样形容自己,毕竟自己的基础和功底都是比较差的)从视频中学习到现在的实践,三次的作业练习让我收获了很多。也是这样也才让我强迫着自己去学习点东西,而不是无所事事的过完这个假期。一次次的挑战和一次次完成作业的欣喜,也让我喜欢上了计算机这个专业。我想,当一个人能够持之以恒地去干一些事情,并从中收获写什么,这才是学习或者工作的乐趣吧。

程序设计第三次作业--C++计算器初始部分的更多相关文章

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

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

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

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

  3. 第三次作业— C++计算器项目的初始部分

    作业题目: C++计算器项目的初始部分 仓库 代码: Scan.h #ifndef SCAN_H #define SCAN_H #include<string> #include<i ...

  4. 面向对象课程 - 寒假第三次作业 - C++计算器项目初始部分

    C++计算器项目初始部分 零.项目源文件地址 传送门:calculator 一.项目信息相关: 项目:Calculator 版本:1.0 日期:2016.2.16 实现: 基本的操作界面 对四则运算表 ...

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

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

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

    一.改错题 1.题目计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 源程序(有错误的程序): #include <stdio.h> int main ...

  7. C语言程序设计第三次作业——选择结构(一)

    (一)改错题 错误信息: 错误原因:y=1/x后没加分号 改正方法:在其后加上分号 错误信息: 错误原因:if语句后接了:,使else语句找不到对应的if 改正方法:删掉if后的分号 错误信息: 错误 ...

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

    (一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. (错误一) 错误原因及改正:第九行语句结尾缺少半角分号,添加分号即可改正 (错误二) 错误原因及改 ...

  9. java 程序设计第三次作业内容

    第一题:输出结果是什么? System.out.println("5+5="+5+5); 第二题:输出结果是什么? int a=3,b; b=a++; sop("a=&q ...

随机推荐

  1. 漫游Kafka实现篇之消息和日志

    消息格式 消息由一个固定长度的头部和可变长度的字节数组组成.头部包含了一个版本号和CRC32校验码. /** * 具有N个字节的消息的格式如下 * * 如果版本号是0 * * 1. 1个字节的 &qu ...

  2. 实现图片大小的自动控制( 图片大小控制CSS代码)

    图片大小控制CSS代码 将以下代码放到你的样式表文件中即可实现图片大小的自动控制. /*图片大小控制CSS By Tekin */img,a img{border:0;margin:0;padding ...

  3. 14.Object-C--浅谈Foundation框架字符串NSString 与NSMutableString

    OC的字符串时经常使用到的,今天我对于OC字符串做一个简单的总结,如果有错误之处,麻烦留言指正.感谢! NSString是一个不可变长度的字符串对象.表示它初始化以后,你不能改变该变量所分配的内存中的 ...

  4. Qt 控制watchdog app hacking

    /************************************************************************** * Qt 控制watchdog app hack ...

  5. struts2自定义声明校验器

    1 //新建一个validators.xml在src根资源下,会覆盖default.xml的validators,所以你懂得 //接着,若使用声明式校验,则要把配置文件xxxAction-valida ...

  6. JFinal 部署在 Tomcat 下推荐方法(转)

    首先明确一下 JFinal 项目是标准的 java web 项目,其部署方式与普通 java web 项目没有任何差别.Java Web 项目在 Tomcat 下部署有一些不必要的坑需要避免,所以撰写 ...

  7. js中substring和substr的用法

    js中substring和substr的用法 substring 方法用于提取字符串中介于两个指定下标之间的字符 substring(start,end) 开始和结束的位置,从零开始的索引 参数    ...

  8. 实验室 Linux 集群的管理常用命令

    实验室有一个Linux集群,本文做一下记录. SSH相关命令 通过SSH登录集群中的其他机器上的操作系统(或虚拟机中的操作系统).操作系统之间已经设置免密码登录. 1. 无选项参数运行 SSH 通常使 ...

  9. 【转】NSArray排序方法

    原文网址:http://www.cnblogs.com/xiaobaizhu/archive/2013/06/05/3119983.html 从网上查的,非常方便的排序api,功能也很强大 1.sor ...

  10. 通过文件流stream下载文件

    public ActionResult ShowLocalizedXML(int id) { string orderName = ""; string xmlString = G ...