दिलचस्प पोस्ट
.NET 2.0 रनटाइम पर LINQ 64 बिट विंडो पर पायथन 32-बिट स्मृति सीमाएं छवि स्केलिंग और घूर्णन सी / सी ++ में रूट में प्रमाणपत्र (निजी कुंजी के साथ) डालने, स्थानीय मैकिन प्रमाणपत्र स्टोर में .NET 4 में विफल रहता है तत्वों के लिए आत्म समापन टैग लिखना पारंपरिक रूप से खाली बुरा अभ्यास नहीं है? एंड्रॉइड एक्शन बार पर मेनू आइटम को स्टाइल कैसे करें ब्राउज़र विंडो को बंद करने से कैसे रोकें? जीआईटी कैसे काम करता है – ठीक काम करता है? SQL सर्वर: पहली पंक्ति में कैसे जुड़ें क्या "* लागू" परिवार वास्तव में वेक्टर नहीं है? "उदार" का क्या उपयोग है? रेल में सक्रिय रिकॉर्ड के लिए डिफ़ॉल्ट समयक्षेत्र कैसे बदल सकता है? ExecuteReader को एक खुला और उपलब्ध कनेक्शन की आवश्यकता है। कनेक्शन का वर्तमान स्थिति कनेक्ट हो रहा है WebView में फ़ॉर्म फ़ील्ड टैप करना नरम कीबोर्ड नहीं दिखाती for..in और hasOwnProperty

इनफ़िक्स अभिव्यक्ति को पोस्टफिक्स एक्सप्रेशंस में कनवर्ट करते समय कोष्ठक को संभालना

मैं जावा में एक प्रोजेक्ट पर काम कर रहा हूं जिसके लिए मुझे एक इनफ़िक्स अभिव्यक्ति को पोस्टफ़िक्स अभिव्यक्ति में कनवर्ट करने की आवश्यकता है। मैं वर्तमान में इनफ़िक्स अभिव्यक्ति को इस पद्धति के साथ पोस्टफ़िक्स में बदलने में सक्षम हूं, जब तक कि वे कोष्ठक नहीं होते हैं, लेकिन मुझे यह पता नहीं लगा कि कोष्ठक को कैसे संभालना है

असल में, मेरे पास दो ढेर हैं जो ऑब्जेक्ट्स को पकड़ते हैं जिन्हें 'टोकन' कहा जाता है टोकन एक आवरण वर्ग है जो एक स्ट्रिंग रखता है जो कि एक संख्या, चर (जो एक संख्या के रूप में मूल्यांकन किया जाता है, उपयोगकर्ता इनपुट पर लंबित होता है), ऑपरेटर (ऑपरेटर का प्राथमिकता स्तर इसके साथ जुड़ा हुआ है, ताकि मेरी विधि यह निर्धारित करे कि कैसे '+', '-', '*' और '/' के बीच के संचालन के आदेश को संभाल लें), या एक कोष्ठक (कोष्ठक को निर्धारित करने का एक तरीका है कि यह एक खुले कोष्ठक या बंद कोष्ठक है)।

मुझे कोष्ठक को कैसे संभालना चाहिए? कोष्ठक के कई परतों के बारे में क्या?

public String toPostFix() { StringBuilder postfixstr = new StringBuilder(); Stack<Token> in_fix = new Stack<>(); Stack<Token> post_fix = new Stack<>(); for (int i = tokens.length - 1; i >= 0; i--) { t = new Token(tokens[i]); in_fix.push(t); } //there are still tokens to process while (!in_fix.empty()) { //is a number if (in_fix.peek().type == 1) { postfixstr.append(in_fix.pop().toString()); } //is an operator and the stack is empty else if (in_fix.peek().type == 3 && post_fix.empty()) { post_fix.push(in_fix.pop()); } // is an operator that has higher priority than the operator on the stack else if (in_fix.peek().type == 3 && in_fix.peek().isOperator() > post_fix.peek().isOperator()) { post_fix.push(in_fix.pop()); } // is an operator that has lower priority than the operator on the stack else if (in_fix.peek().type == 3 && in_fix.peek().isOperator() <= post_fix.peek().isOperator()) { postfixstr.append(post_fix.pop()); post_fix.push(in_fix.pop()); } //puts the rest of the stack onto the output string if (in_fix.empty()) { while (!post_fix.empty()) { postfixstr.append(post_fix.pop()); } } } return postfixstr.toString(); } 

Solutions Collecting From Web of "इनफ़िक्स अभिव्यक्ति को पोस्टफिक्स एक्सप्रेशंस में कनवर्ट करते समय कोष्ठक को संभालना"

आपको बाएं कोष्ठकों को स्टैक पर धकेलने की जरूरत है, और जब आप सही कोष्ठक का सामना करते हैं तो स्टैक को संसाधित करें:

 // opening ( if (in_fix.peek().type == 4) { post_fix.push(in_fix.pop()); } //closing ) if(in_fix.peek().type == 5){ while(!(post_fix.isEmpty() || post_fix.peek().type == 4)){ postfixstr.append(post_fix.pop()); } if (post_fix.isEmpty()) ; // ERROR - unmatched ) else post_fix.pop(); // pop the ( in_fix.pop(); // pop the ) } 

इस तरह से प्रयास करें:

  //opening Parenthesis if (in_fix.peek().type == 4) { post_fix.push(in_fix.pop()); } //closing Parenthesis if(in_fix.peek().type == 5){ //Till opening parenthesis encountered in stack, append operators to postfix. and pop parenthesis and do not append to post_fix. while(post_fix.peek().type!=4){ postfixstr.append(post_fix.pop()); } //finally pop left parenthesis from post_fix stack. post_fix.pop(); } 

मैं जो सुझाऊंगा वह है:

  • एक बाहरी खोज करें जो एक कोष्ठक अभिव्यक्ति के लिए खोज करता है
  • इस उप अभिव्यक्ति पर प्रक्रिया चलाना जब तक आपका परिणाम न हो।
  • नतीजा है कि संख्या के साथ कोष्ठक अभिव्यक्ति बदलें
  • दोहराएं जब तक सभी कोष्ठक अभिव्यक्तियाँ प्रतिस्थापित न हों।
 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class InfixTopostFix { public static void main(String argv[]) throws IOException { String infix; InfixTopostFix converter = new InfixTopostFix(); //create an input stream object BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in)); //get input from user System.out.print("\nEnter the algebraic expression in infix: "); infix = keyboard.readLine(); //output as postfix System.out.println("The expression in postfix is:" + converter.toPostfix(infix)); } private String toPostfix(String infixString) //converts an infix expression to postfix { char inputSymbol; String postfixOutput = ""; Stack<Character> operatorStack = new Stack<>(); for (int i = 0; i < infixString.length(); ++i) //while there is input to be read { inputSymbol = infixString.charAt(i); if (Character.isLetter(inputSymbol)) { postfixOutput = postfixOutput + inputSymbol; } else if (inputSymbol == '(') { operatorStack.push(inputSymbol); } else if (inputSymbol == ')') { while (operatorStack.peek() != '(') { postfixOutput = postfixOutput + operatorStack.pop(); } operatorStack.pop(); //remove '(' } else { while (!operatorStack.isEmpty() && !(operatorStack.peek() == '(') && prec(inputSymbol) <= prec(operatorStack.peek())) { postfixOutput = postfixOutput + operatorStack.pop(); } operatorStack.push(inputSymbol); } } while (!operatorStack.isEmpty()) postfixOutput = postfixOutput + operatorStack.pop(); return postfixOutput; } int prec(char x) { if (x == '+' || x == '-') return 1; if (x == '*' || x == '/' || x == '%') return 2; return 0; } } 

इनफिक्स को पोस्ट फिक्स में कनवर्ट करने के लिए सरलीकृत समाधान: यदि वर्तमान वर्ण, एक वर्णमाला है, तो इसे अस्थायी आउटपुट स्ट्रिंग के लिए एक ऑपरेटर में जोड़ें, सभी ऑपरेटरों को पॉपअप करें (अस्थायी आउटपुट स्ट्रिंग में) जो वर्तमान ऑपरेटर की तुलना में या उससे अधिक के बराबर है और फिर वर्तमान ऑपरेटर को सही पैरांथास को धक्का दें, सभी ऑपरेटरों को पॉप अप करें (अस्थायी आउटपुट स्ट्रिंग में) जब तक बाएं कोष्ठक को एक बाएं कोष्ठक में ढक्कन में नहीं मिलता है, बस उसे स्टैक पर दबाएं