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

Github地址点这里

题目:

Github地址点这里

题目:

代码:

main.cpp

1 #include<iostream> 
2 #include<string> 
3 #include<queue> 
4 #include<stdlib.h> 
5 #include"Calculator.h" 
6 

7 

8 using namespace std; 
9 

10 int main(void) 
11 { 
12 	Scan scan; 
13 	Print print; 
14 

15 	cout << "请输入表达式" << endl; 
16 	string input; 
17 	cin >> input; 
18 

19 	queue<string>queue = scan.ToStringQueue(input); 
20 

21 	print.ToOutput(queue); 
22 	system("pause"); 
23 	return 0; 
24 } 

Calculator.h

1 #include<string> 
2 #include<queue> 
3 using namespace std; 
4 

5 class Scan 
6 { 
7 public: 
8 	queue<string>ToStringQueue(string input); 
9 private: 
 	queue<string>m_quQueue; 
11 	int    length = 0;//lengh计算数字的长度是否超标. 
12 	string trans = "";//trans将char型转换为string型. 
13 }; 
14 

15 class Print 
16 { 
17 public: 
18 	void ToOutput(queue<string>queue); 
19 };    	

ScanPrint.cpp

1 #include<iostream> 
2 #include<string> 
3 #include<queue> 
4 #include<cctype> 
5 #include"Calculator.h" 
6 using namespace std; 
7 

8 queue<string>Scan::ToStringQueue(string input) 
9 { 
10 

11 	for(int i = 0; i < input.length(); i++)//扫描整个string. 
12 	{ 
13 

14 

15 		if (isdigit(input[i]) || input[i] == '.')//如果扫描到数字,对整个数字进行处理. 
16 		{ 
17 			if (input[i] == '.') 
18 			{ 
19 				i++;//如果接收到小数点,不计数,直接接收下一个数字. 
20 			} 
21 

22 			length += 1; 
23 

24 			if (length >= 10) 
25 			{ 
26 				if(!m_quQueue.empty()) 
27 				m_quQueue.pop();//当数字长度超标,清除数据 
28 

29 				cout << "数字长度超标!" << endl; 
30 
 
31 				return m_quQueue; 
32 				break; 
33 			} 
34 			 
35 			trans += input[i]; 
36 			if (!isdigit(input[i + 1])) 
37 			{ 
38 				m_quQueue.push(trans); 
39 				continue; 
40 			} 
41 		} 
42 		else//接收到的是符号 
43 		{ 
44 			trans = input[i]; 
45 			m_quQueue.push(trans);//直接进队 
46 			trans = ""; 
47 		} 
48 	} 
49 	return m_quQueue; 
50 } 
51 

52 void Print::ToOutput(queue<string>queue) 
53 { 
54 	string Output; 
55 	while (!queue.empty()) 
56 	{ 
57 		Output = queue.front(); 
58 		cout << Output << endl; 
59 		queue.pop(); 
60 	} 
61 } 

运行结果

解题过程

  • 在之前的自学中,有学习到了题目中要求的string与类,但是对于queue还没有了解。在经过查找研究之后略微知道了queue的用法。

  • 了解了queue之后,我认为题目的重点是对数字的处理,要把一个数字完整的放进队列,并且判断数字的长度是否超标。

  • 在编写时,没有熟练掌握string的+=用法,给自己带来了很多麻烦。还去考虑通过*10来对数字进行处理。

  • 经过查找后,了解了CCTYPE函数,对判断有了很大帮助。

  • 经过题目的实践之后才算真正熟悉了C++熟悉了类熟悉了string。能够感受到C++的便捷和魅力。
原文地址:https://www.cnblogs.com/Wjianting/p/5222052.html