《面向对象程序设计》第三次作业 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;
}

数据检测

《面向对象程序设计》第三次作业 Calculator

《面向对象程序设计》第三次作业 Calculator

ps:看视频比看书效率高、有意思,不要问我怎么知道的……

上一篇:Swift - 懒加载(lazy initialization)


下一篇:SpringMVC视图解析器(转)