注:這是乙個c++計算器專案的初始部分。
大體功能簡介:
實現**如下:
#ifndef _scan_h_
#define _scan_h_
#include#include#includeusing std::string;
using std::queue;
class scan; // ->暫無
~scan(){}; // ->暫無
queuegetexp() //返回expression佇列的內容
queuetostringqueue(string ); //tostringqueue將string的內容逐字元提取轉換為string佇列
}; #endif
#ifndef _print_h_
#define _print_h_
#include#include#includeusing namespace std;
class print; //暫無
~print(){}; //暫無
bool putq(queueoutput); //逐行輸出string佇列
};#endif
#include#include#include"scan.h"
#include"print.h"
int main()
#include"scan.h"
bool scan::isdigit(char c) //判斷是否是數字或句點
void scan::numerr()
queuescan::tostringqueue(string input)
{int i=0,dlen=0; //i用於迴圈,dlen用於表示數值長度
int len=input.length(); //用input的長度len來作為迴圈條件
string& c=input; //用c來代替input不然打的太累了=。=
string temp=""; //temp用來暫儲input中的元素
while( i10)numerr(); //判斷數值是否超出範圍
if( (i+1)output)
{int count=0; //count計數確保輸出正確
while( !output.empty() ){
cout<
**編寫過程遇到的問題:
當時的想法是逐字元提取,
後來在debug模式下才找到罪魁禍首,上面這個語句中,當i不小於len後程式向下執行
但是執行到箭頭處時,此時的c[i]已經超出下標範圍了,之後又一次i++了,
而且在下面這步的迴圈條件中的dlen++<=10有錯,這使得數值最大可達11位
第一次寫的這個函式的邏輯有點亂,把上面所有bug總結了一遍後,開始大換血,重新寫了乙個邏輯稍清晰的,正確執行。
因為乙個不小心,耗費了自己一下午時間來debug,簡直血與淚的代價啊,事實告訴自己以後寫程式還是要多想一會,否則大把大把的時間就這樣沒了,同時也告誡自己以後要多注重程式的邏輯,這樣才能寫出更健壯的**來。
作為大學生活的第乙個c++專案,肯定有許多不足之處,歡迎看過的各位給我批評與建議,謝謝!
初試 Julia 語言
之所以這樣說,有三個方面的理由 作為乙個動態語言,它的 jit 編譯器 在很多情況下 還沒有智慧型到,讓我可以同時享受動態語言的便利和它的速度優勢。例如最近我在試用 julia 時最先嘗試的就是把原來用 numba 寫的函式重寫一遍,然而發現結果非常不好。julia 版本的函式執行速度相當於純 py...
初試 廣義表
廣義表 又稱列表 是一種非線性的資料結構,是 線性表的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。它被廣泛的應用於人工智慧等領域的表處理語言lisp語言中。在lisp語言中,廣義表是一種最基本的資料結構,就連lisp 語言的程式也表示為一系列的廣義表。廣義表是 n n 0 個...
鏈式程式設計初試
鏈式程式設計思想 將多行操作通過 連線成一句 使 可讀性好,比如 a 1 b 2 c 3 代表性的就是masonry 鏈式程式設計特點 方法的返回值是block,block必有返回值 自身物件 block引數 操作物件 先簡單介紹下目前咱們已知的程式設計思想。1 面向過程 處理事情以過程為核心,一步...