日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c语言int 转bool_C++代码实现逆波兰式_C 语言

發布時間:2023/12/1 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言int 转bool_C++代码实现逆波兰式_C 语言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

100行以內C++代碼實現逆波蘭式

逆波蘭式(Reverse Polish notation,RPN,或逆波蘭記法),也叫后綴表達式(將運算符寫在操作數之后)。

算術表達式轉逆波蘭式例子:

逆波蘭式整體的算法流程圖如下:

下面給出我基于C++ 語言對逆波蘭式算法的實現代碼,值得注意的是:

1、算法中對操作數,僅支持一個字符的字母或數字的操作數,如:x,y,j,k,3,7等;如果要支持多個字符的操作數,如:var1,等。需要讀者自己擴展對算術表達式操作數的分詞部分的代碼。

2、為了為了增加轉換后的逆波蘭表達式的可讀性,我在每個操作數和操作符輸出時后面追加了一個空格。

代碼如下:

/// file: #include <string> #include <stack>class ReversePolishNotation { private:std::string _expr;unsigned _idx;std::stack<std::string> _stk; public:ReversePolishNotation(const std::string &expr);std::string nextWord();std::string operator()();static int getOpPriority(const std::string &word);bool isWord(const std::string &word);bool isOperator(const std::string &word); }; /// file: ReversePolishNotation.cpp #include <iostream> #include <cassert> #include "" #include <cctype> #include <sstream>using std::cout; using std::endl;ReversePolishNotation::ReversePolishNotation(const std::string &expr) : _idx(0), _expr(expr) {}std::string ReversePolishNotation::nextWord() {if (_idx >= ()) {return "";}return _expr.substr(_idx++, 1); }std::string ReversePolishNotation::operator()() {std::stringstream outExpr;std::string word;std::string topElem;while (true) {word = nextWord();if (isWord(word)) {outExpr << word << " ";} else if (isOperator(word)) {if (() || () == "(") {(word);continue;}topElem = ();while (getOpPriority(topElem) > getOpPriority(word)) {outExpr << topElem << " ";();if (()) {break;}topElem = ();}(word);} else if (word == "(") {(word);} else if (word == ")") {while (true) {topElem = ();();if (topElem == "(") {break;}assert(!() && "[E]Expr error. Missing '('.");outExpr << topElem << " ";}} else if (word == "") {while (!()) {topElem = ();assert (topElem != "(" && "[E]Expr error. Redundant '('.");outExpr << topElem << " ";();}break;} else {assert(false && "[W]>>>Can not recognize this word");}}return outExpr.str(); }int ReversePolishNotation::getOpPriority(const std::string &word) {if (word == "+") { return 1; }if (word == "-") { return 1; }if (word == "*") { return 2; }if (word == "/") { return 2; }return 0; }bool ReversePolishNotation::isWord(const std::string &word) {return isalpha(()[0]) || isdigit(()[0]); }bool ReversePolishNotation::isOperator(const std::string &word) {return word == "+" ||word == "-" ||word == "*" ||word == "/"; }/// ---測試代碼--- int main() {assert(ReversePolishNotation("a+b*c")() == "a b c * + ");assert(ReversePolishNotation("(a+b)*c-(a+b)/e")() == "a b + c * a b + e / - ");assert(ReversePolishNotation("3*(2-(5+1))")() == "3 2 5 1 + - * "); // assert(ReversePolishNotation("3*((2-(5+1))")() == "3 2 5 1 + - * "); // Failed Case: Redundant '(' // assert(ReversePolishNotation("3*(?2-(5+1))")() == "3 2 5 1 + - * "); // Failed Case: Can not recognize '?'return 0; }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的c语言int 转bool_C++代码实现逆波兰式_C 语言的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。