【解決方法】このエラーを解決する方法を教えてください


C++
  1  #include<iostream>
  2  #include<algorithm>
  3  #include<stack>
  4  #include<string>
  5  using namespace std;
  6  
  7  int priority(char c) {
  8  	if (c == '-' || c == '+')
  9  		return 1;
 10  	else if (c == '*' || c == '/')
 11  		return 2;
 12  	else if (c == '^')
 13  		return 3;
 14  	else
 15  		return 0;
 16  
 17  }
 18  
 19  string infixtopostfix(string exp) {
 20  
 21  	stack<char> stk;
 22  	string output = "";
 23  	for (int i = 0; i < exp.length(); i++) {
 24  		if (exp[i] == ' ') { continue; }
 25  		else if (isdigit(exp[i]) || isalpha(exp[i])) {
 26  			output += exp[i];
 27  		}
 28  		else if (exp[i] == '(') {
 29  			stk.push('(');
 30  		}
 31  		else if (exp[i] == ')') {
 32  			while (stk.top() != '(') {
 33  				output += stk.top();
 34  				stk.pop();
 35  			}
 36  
 37  			stk.pop();
 38  		}
 39  		else {
 40  			while (!stk.empty() && priority(exp[i]) <= (priority(stk.top()){
 41  				output += stk.top();
 42  				stk.pop()
 43  			}
 44  			stk.push(exp[i]);
 45  		}
 46  	}
 47  
 48  			while (!stk.empty()) {
 49  				output += stk.top();
 50  				stk.pop();
 51  			}
 52  
 53  			return output;
 54  		
 55  
 56  
 57  
 58  			int main() {			
 59              	string infixexpression = ("(3+2)+7/2*((7+3)*2");
 60  				cout << infixtopostfix(infixexpression) << endl; 
 61  				return 0;
 62  			}

私が試したこと:

注: コード ブロック内のエラーは太字で示されています

エラーは次のとおりです
a’)’ 行 40 を期待
ステートメント行が必要です 45
‘;’ 行 58 が必要です
構文エラー ‘;’ 41行目
構文エラー ‘;’ がありません ‘}’ 行 43 の前
構文エラー ‘while’ 行 48
構文エラー:「;」がありません ‘{‘ 行 48 の前
‘{‘ 関数ヘッダーがありません (古いスタイルのリスト?) 48 行目
構文エラー: ‘return’ 行 53

解決策 1

最初のメッセージはかなり明確です。 括弧がないため、40 行目は次のようになります。

C++
while (!stk.empty() && priority(exp[i]) <= (priority(stk.top()) ) {

また、前の閉じ中括弧が欠落しているようです int main 終了する行 infixtopostfix 関数。

解決策 2

Rick が言ったことに付け加えると、コーディング中に毎日、おそらく 1 日に何度も構文エラーが発生することを予期する必要があります。 変数やキーワードのスペルを間違えることがあります。 文字列やコード ブロックを閉じるのを忘れることがあります。 猫があなたのキーボードの上を歩いて、とても奇妙なことをタイプすることがあります。 メソッド呼び出しに必要なパラメーターの数を忘れてしまうことがあります。

我々はすべての間違いを犯します。

そして、私たちは皆そうしているので、構文エラーを修正する必要があります。他の誰かが修正してくれるのを待つよりも、方法を学んで自分で修正する方がはるかに迅速です! したがって、エラー メッセージの読み方と、コンパイラが間違っていると言っていることに照らして記述されたコードを解釈する方法を学ぶことに少し時間を費やしてください。

だからこれを読んでください: 問題を解決するコードの書き方、初心者向けガイド パート 2: 構文エラー[^] – 次回コンパイル エラーが発生したときに役立つはずです。

私たちはあなたがそれらを修正するのを手伝いたくないと言っているのではありません – 私が書くつもりだったものを読んでいるために、私自身のエラーを見ることができないことがあります – しかし、構文エラーを修正することは仕事の一部です.あなたが業界で仕事を得ると、人々はあなたを少し奇妙に見るでしょう!

コメント

タイトルとURLをコピーしました