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

Github地址点这里

题目:

886235-20160226222110677-578771176.png

886235-20160226222121536-401696030.png

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 } 

运行结果

886235-20160226225614099-2032502867.png

886235-20160226225621146-99869691.png

解题过程

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

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

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

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

886235-20160226225604880-865048370.png

  • 经过题目的实践之后才算真正熟悉了C++熟悉了类熟悉了string。能够感受到C++的便捷和魅力。

转载于:https://www.cnblogs.com/Wjianting/p/5222052.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值