天天看點

面向對象程式設計第三次作業

c++電腦項目初始部分

  • Github相關連結:https://github.com/H-BING/object-oriented/tree/master/Calculator

1、 項目概述

  • 定義

    Scan類

    ToStringQueue(string input)

    接收四則運算表達式,提取數字和符号存入

    queue

  • Print類

    獲得輸出所得隊列并逐個輸出

要求:

1. 當輸入的數字超過10位(包括小數位)時,報錯

2. 能夠處理不超過10位的任意實數

2、 準備階段

  • 先來唠嗑唠嗑hhh~第三次作業出來前看完了c++遠征的起航篇與離港篇還有點小高興完成了自己的計劃o( ̄︶ ̄)o,結果第三次作業一出來就發現第二次作業中說的

    自學多少課時數不限

    根本不是真的(┬_┬)。這第三次作業沒有看到一定程度根本做不了……
  • 好呗,那也隻能繼續看咯。看完群裡學長說的封裝篇(上)和模闆篇的模闆函數與模闆類(模闆篇不知道是不是因為跳過好些篇章是以看的并不是很懂 0 0 然後用的時候好像也沒怎麼用到)
  • 啊,還有

    <queue>

    。說到這個不得不推薦:http://www.cplusplus.com/reference/queue/queue/

    高中資訊技術競賽學霸的強推hhh

    真的很好用,雖然都是英文解釋查詞好辛苦,但重要的是還有例子看!!!就算懶得查詞,代碼示例看一看也大概懂得七七八八知道怎麼用了。

3、 嘗試與解決

  • 首先,我并沒有馬上去定義

    Scan類

    Print類

    ,而是先不管題目要求自己先在一個檔案裡寫了一段基本上能滿足輸入和輸出要求的代碼,然後再逐漸往題目要求方向改寫。初稿如下:
    #include<iostream>
     #include <string>
     #include <queue>
     using namespace std;
     
     int main() {
     
     	string input;
     	cin >> input;
        
     	for (int i = 0; i <= input.size(); i++) {	
     		if (input[i] <= '9'&&input[i] >= '0' || input[i] == '.') {
     			if ((input[i + 1] <= '9'&&input[i + 1] >= '0') || input[i + 1] == '.') {
     				cout << input[i] ;
     			}
     			else {
     				cout << input[i] << endl;
     			}
     		}
     		else {
     			cout << input[i] << endl;
     		}
     	}
    
     return 0;
    
     }
               
  • 顯然在輸出時由

    是否輸出回車

    來達成的輸出格式的标準是不符合題目要求的。如何将數字拼接在一起而不是以單個字元存在着實困擾了我好久 0 0

    後來我想了個蠢辦法……再定義一個 string 數組把 input[i] 轉換成 string 類型,然後就可以進行數字的拼接啦啦啦~

    #include<iostream>
     #include <string>
     using namespace std;
     
     int main() {
     
     	string input;
     	cin >> input;
         
         //将input[i]轉換成string類型
         string _input[10000];    
     	for (int i = 0; i <= input.size(); i++) {
     		_input[i] = input[i];
     	}
        
     	for (int i = 0; i <= input.size(); i++) {	
     		if (input[i] <= '9'&&input[i] >= '0' || input[i] == '.') {
     			if ((input[i + 1] <= '9'&&input[i + 1] >= '0') || input[i + 1] == '.') {
     				//cout << input[i] ;
     				_input[i] += _input[i + 1];
     				_input[i + 1] = _input[i];
     			}
     			else {
     				//cout << input[i] << endl;
     				cout << _input[i] << endl;
     			}
     		}
     		else {
     			//cout << input[i] << endl;
     			cout << _input[i] << endl;
     		}
     	}
    
     return 0;
    
     }
               
  • 接下來就是把輸入和輸出部分分别放到定義的

    Scan類

    Print類

    裡面,再按題目要求用上

    <queue>

    的相關知識就沒什麼大問題啦。對了對了,題目要求的報錯别忘啦~

    GG 之前貼代碼竟然把代碼最下面兩行

    return 0;

    }

    給漏了...兩個代碼都給漏了...看來以後還是要認真再多看幾遍( ̄m ̄)

4、 待改進

  • 那個用 string 數組把 input[i] 轉換類型的方法總是感覺不是很好 0 0

    後面寫的時候怕數組開小結果不幸

    Stack overflow

    。然後改用

    new

    申請記憶體算是過了,不過記憶體申請多的時候那個反應速度簡直不忍直視。