第三次附加作业

1、代码链接:https://github.com/laixiaolian/object-oriented

2、Calculator.cpp

#include "Calculator.h"
#include <iostream>
bool Scan::ToStringQueue(string input)
{
size_t markOfReadPos = 0; //标识已经导入到input的第几位,初始0为input第一位
bool isDigit = false; 
bool isdecimal = false; 

for (size_t i = 0; i != input.size(); i++)
{
	if (isdigit(input[i]) || input[i] == '.') //判断是否为数字,包括小数点
	{
		if (input[i] == '.') 
		{
			isdecimal = true;	
		}
		
		isDigit = true;
		continue;
	}


	else 
	{
		if (isDigit == true) //判断是否刚读完一串数字
		{
			isDigit = false;
			string tmp = input.substr(markOfReadPos,i - markOfReadPos); //i - markOfReadPos为要截取的字符串字符数

			//判断输入的数字是否超过10位

			if (isdecimal) 
			{
				if ((tmp.size() - 1) > 10) 
				{	
					return false;	
				}
	    	}


			else 
			{
				if (tmp.size() > 10) //整数部分超过10位
				{	
				  return false;	
				}
			}


			m_scanstring.push(tmp); //将markOfReadPos 到 i位置的数字 的string导入queue
			markOfReadPos = i;
			isdecimal = false;
		}


		string sign;
		sign.insert( sign.begin(), input[i] ); //把char转化成string
		m_scanstring.push(sign);
		markOfReadPos++;
	}	
}


if (isDigit) //表示表达式最后为数字
{
	string tmp = input.substr(markOfReadPos,input.size() - markOfReadPos); //i - markOfReadPos为要截取的字符串字符数


	//判断输入的数字是否超过10位

	if (isdecimal) 
	{	
		if ((tmp.size() - 1) > 10) 
		{	
			return false;	
		}	
	}


	else 
	{	
    	if (tmp.size() > 10) 
		{	
			return false;	
		}
	}

	m_scanstring.push(tmp); //将markOfReadPos 到 i位置的数字 的string导入queue
}

return true;	
}


void Print::PrintQueue(queue<string>& tmpQueue)
{
while(!tmpQueue.empty()) //此种遍历会清空queue
{
	cout<<tmpQueue.front()<<endl;
	tmpQueue.pop();	
}				
}

3、Calculator.h

#include<queue>
#include "string"
using namespace std;

scan类

class Scan
{
public:
	Scan() {};
	~Scan() {};
	
public:
	bool ToStringQueue(string input); //读取用户输入的四则运算表达式inupt,分解后转存到m_scanstring
	
public:
	queue<string> m_scanstring;	
};

print类

class Print
{
public:
	Print() {};
	~Print() {};
	
public:
	void PrintQueue(queue<string>& tmpQueue); //接受一个队列
};

4、main.cpp

#include "Calculator.h"
#include <iostream>
using namespace std;
int main()
{
string input;
Scan scanMachine;
Print printMachine;

cin>>input;

if (scanMachine.ToStringQueue(input))
{
	printMachine.PrintQueue(scanMachine.m_scanstring);	
}

else
{	
	cout<<"包含位数超10位的数字,请重新输入!";
}

system("pause");
}
原文地址:https://www.cnblogs.com/laixiaolian/p/5314546.html