zoukankan      html  css  js  c++  java
  • 面向对象程序设计第三次作业

    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++的便捷和魅力。
  • 相关阅读:
    2013.11.3
    计算机面试书籍
    SDPLR的安装过程(matlab)
    Semi-definite programming优化工具
    R-note1
    Ubuntu---2
    C#中DataTable转换为string
    MFC获取字符串长度的5中方法
    根据不同的操作系统(64/32),设置文件以64位运行。又可解决问题:“试图加载不正确的程序”。
    WinServer2008下通过powershell获取IIS等角色功能列表,保存至txt
  • 原文地址:https://www.cnblogs.com/Wjianting/p/5222052.html
Copyright © 2011-2022 走看看