//乙個簡單的計算器**,主要用來練習c++11新標準的程式設計技術和stl應用1 #include2 #include3 #include4 #include
5 #include6 #include
7using
namespace
std;89
10 typedef functionoptionfun;
11 stacksnumber;
12 stacksoption;
13 mapoptfunmap;
14 mapoptweightmap;
1516
#define declare_opt(opts,preority) \
17 optweightmap[#opts] = int
(preority);\
18 optfunmap[#opts] = bind((float a, float b), placeholders::_1, placeholders::_2);
1920
21void
init_option()
2228
29bool isoption(string
op)30
34float recognize_float(const
char* pstr, int&width)35;
37int dotcount = 0;38
for(int i=0;pstr[i]!='
\0';i++)
3946
else
4751}52
return
atof(value);53}
5455
//offset from '(' to ')'
56int check_match(const
char*str)
5767}68
return match?offset:-1;69
}7071void
handle_stack()
7281 auto it =optfunmap.find(opt);
82if(it !=optfunmap.end())
8392}93
}94float calc(const
char*str)
95101
102if(*str=='
+'||*str=='-'
)103
106while(*str!='\0'
)107
115if(*str=='('
)116
123 soption.push("("
);124 calc(str+1
);125 str +=len;
126continue
;127
}128
if(*str==')'
)129
133string ops(1,*str);
134if
(isoption(ops))
135142
}143
soption.push(ops);
144 str++;
145continue
;146
}147 cout<<"
invalid express
"<148return0;
149}
150handle_stack();
151return
snumber.top();
152}
153int
main()
154164
return0;
165 }
這個計算器去年也寫了乙個,這次**少了將近一半,說明還是有進步的……下次再少一點就好了,因為現在看上去還是有一些不和諧的東西,比如float型別的限制、括號處理分在了兩個函式裡面等。
用棧解析算術表示式 Python版
中採用了三步實現算術表示式的解析 1.將算術表示式 字串 轉換成乙個列表parseelement方法 2.將列表表示的算術表示式轉換成字尾表示式changetosuffix 3.計算字尾表示式的結果 這裡我是為了方便,就寫了個parseelement,不想那方法寫到後面卻把自己繞住了,可以想象乙個帶...
四則表示式計算模板第二版
四則表示式計算模板第二版 女孩 本版除了修正上乙個版本的bug之外,核心是重寫的,使得結構更為緊密,更為短小 格式方面就將就一下吧。include define is equ s,a,b,c,d s a s b s c s d define in n if st 4 yzfy yzfy getval...
C程式語言(第二版) 1 8
1 8輸出所輸入字元中空格,製表符,換行符的個數 includevoid main printf 空格 d t製表符 d回車 t d n space,table,enter 1.換行符 n 與回車符 r 不是一回事兒,換行符ascii為10,回車符的ascii為13 2.換行符就是另起一行,回車符就...