मान लीजिए हम एक मूल कैलकुलेटर बनाना चाहते हैं जो मूल अभिव्यक्ति परिणाम प्राप्त करेगा। व्यंजक में उद्घाटन और समापन कोष्ठक, धन या ऋण चिह्न और रिक्त स्थान हो सकते हैं।
तो अगर स्ट्रिंग "5 + 2 - 3" की तरह है, तो परिणाम 7 होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
रिट:=0, साइन:=1, संख्या:=0, एन:=एस का आकार
-
एक स्टैक सेंट परिभाषित करें
-
प्रारंभ करने के लिए i :=0, जब i
-
एक सरणी x =s आकार i
. परिभाषित करें -
अगर x>='0' और x <='9', तो,
-
अंक =संख्या * 10
-
संख्या =संख्या + (x - '0')
-
-
अन्यथा जब x '(' के समान हो, तब -
-
रिट =रिट + (चिह्न * संख्या)
-
सेंट में रिट डालें
-
सेंट में साइन इन डालें
-
रिट:=0, साइन:=1, अंक:=0
-
-
अन्यथा जब x ')' के समान हो, तब -
-
रिट =रिट + (चिह्न * संख्या), चिह्न:=1, अंक:=0
-
रिट =रिट * सेंट का शीर्ष तत्व
-
सेंट से आइटम हटाएं
-
रिट =रिट + सेंट का शीर्ष तत्व
-
सेंट से आइटम हटाएं
-
-
अन्यथा जब x '+' के समान हो, तब −
-
रिट =रिट + (चिह्न * संख्या), चिह्न:=1, अंक:=0
-
-
अन्यथा जब x '-' के समान हो, तब -
-
रिट =रिट + (चिह्न * संख्या), संकेत:=- 1, अंक:=0
-
-
-
यदि संख्या शून्य नहीं है, तो,
-
रिट =रिट + साइन * अंक
-
-
वापसी रिट
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: int calculate(string s) { int ret = 0; int sign = 1; int num = 0; int n = s.size(); stack <int> st; for(int i = 0; i < n; ++i){ char x = s[i]; if(x >= '0' && x <= '9'){ num *= 10; num += (x - '0'); } else if(x == '('){ ret += (sign * num); st.push(ret); st.push(sign); ret = 0; sign = 1; num = 0; } else if(x == ')'){ ret += (sign * num); sign = 1; num = 0; ret *= st.top(); st.pop(); ret += st.top(); st.pop(); } else if(x == '+'){ ret += (sign * num); sign = 1; num = 0; } else if(x == '-'){ ret += (sign * num); sign = -1; num = 0; } } if(num){ ret += sign * num; } return ret; } }; main(){ Solution ob; cout << (ob.calculate("5 + 2 - 3")); }
इनपुट
"5 + 2 - 3"
आउटपुट
4