面向对象程序设计作业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. Flume环境部署和配置详解及案例大全

    flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本.HDF ...

  2. 博客已搬家至 hate13.com

      博客园停止更新,新博客链接:hate13.com 欢迎访问~

  3. HDU 5371 Hotaru's problem (Manacher,回文串)

    题意:给一个序列,找出1个连续子序列,将其平分成前,中,后等长的3段子序列,要求[前]和[中]是回文,[中]和[后]是回文.求3段最长为多少?由于平分的关系,所以答案应该是3的倍数. 思路:先Mana ...

  4. HDU 2577 How to Type (DP,经典)

    题意: 打字游戏,求所按的最少次数.给出一个串,其中有大小写,大写需要按下cap键切换到大写,或者在小写状态下按shift+键,这样算两次,打小写时则相反.注意:在打完所有字后,如果cap键是开着的, ...

  5. Heritrix源码分析(十五) 各种问题总结(转)

    开博客以及建立Heritrix 群有一段时间了(这里谢谢大家的关注),这篇博客将整理这段时间所遇到的问题.同时由于自己从今年5月份开始就不怎么接触Heritrix,很多东西开始遗忘(不过里面思想没忘) ...

  6. 初识jQuery 2013-09-26

    常用选择器 $("#bad")  id选择器 $("div#bad")   id为bad 并且必须是div的元素 $("[href]")  ...

  7. linux各种查看端口号

    1.  查看端口占用情况的命令:lsof -i    [root@www ~]# lsof -i         COMMAND PID USER FD TYPE DEVICE SIZE NODE N ...

  8. Android RecyclerView使用详解(二)

    在上一篇(RecyclerView使用详解(一))文章中简单的介绍了RecyclerView的基本用法,接下来要来讲讲RecyclerView的更多用法,要实现不同的功能效果,大部分都还是在于Recy ...

  9. 开发者必须知道的HTML5十五大新特性

    HTML5想必大家都很熟悉了,因为太多的媒体在讨论这一技术.然而,你能准确地说出HTML5带来了哪些新特性吗?本文总结了HTML5带来的15项你必须知道的新特性. 一起来看下: 1.新的文档类型  ( ...

  10. 恢复SD卡错删数据

           对于众多米粉来说,手机里存储的很多资料都非常宝贵,如果不小心删除了,想要重新收集这些资料就显得非常困难.有道是千金易得,数据无价,特别是一些珍贵照片之类的充满回忆的数据,丢失了甚至会抱憾 ...