2011-09-14 5 views
-1

ユーザーが入力した式に正しいかっこのシーケンスがあるかどうかを判断するために、次のコードを記述しました。ユーザーが[a *(b + c)]を入力してokを入力するとしかし、もし彼が[a *(b + c)[それが正しくない。式を判定するためのスタック実装

Stacklist.cppは、スタックのリンクリストの実装と、pushおよびpopの関数の定義を含むファイルです。表示は、一番上のエントリを表示するだけの機能です。

#include<iostream> 
#include<exception> 
using namespace std; 
#include"stacklist.cpp" 

int main() 
{ 
string s; 
cin>>s;//user inputs the string 
stacklist<int> stack1;//the class in stacklist.cpp...int because all bracket's ascii values are ints 
char c; 

while((c=cin.get())!=EOF) 
{ 

    switch('c') 
    { 
     case '(': case '{': case '[': 
      stack1.push('c'); 
      break; 

     case ')': 
      {char s=stack1.display(); 
       try 
       { 
       if(s=='(') 
        { stack1.pop(); 
        continue;} 
       else 
        throw 5; 
       }//try block  

       catch(5) //.......(a) 
       { 
       cout<<"unmatched bracket error"; 
       exit(-1); 
       }//catch over  
      }//')' case 
      break; 

     case '}': //.......(b) 
      {char s=stack1.display(); 
       try 
       { 
       if(s=='{') 
        { stack1.pop(); 
        continue;} 
       else 
        throw 6; 
       }//try block  

       catch(6) //......(a) 
       { 
       cout<<"unmatched bracket error"; 
       exit(-1); 
       }//catch over  
      }//'}' case 
      break; 

     case ']': ........(c) 
      {char s=stack1.display(); 
      try 
       { 
       if(s==']') 
        { stack1.pop(); 
        continue;} 
       else 
        throw 7; 
       }//try block  

      catch(7) //.............(a) 
       { 
       cout<<"unmatched bracket error"; 
       exit(-1); 
       }//catch over  
      }//']' case 
      break;//..........(d) 

     default: 
      break;  
    } //switch 

} //while 

if(stack1.display==0)//0 is displayed if stack is empty 
    cout<<"string is correct"<<endl; 
else 
    cout<<"unequal number of brackets"<<endl; 

    system("pause"); //........(e) 
    return 0; 
} //main 

は、今の問題は、私は、コードをコンパイルすると、さまざまなエラーが発生したということです。

syntax error before numeric constant.........in all (a) 
case label '}' not within switch statement........(b) 
case label ']' not within switch statement........(c) 
syntax error before break.................(d) 
ISO forbids declaration of 'system' with no type...........(e) 

これらのエラーをプラグインする方法を教えてください?

+0

あなたのブレーススタイルと一貫していたいと思うかもしれません。 – Marlon

答えて

3
  • systemヘッダcstdioで見つかっていますが、そのヘッダ#includeませんでした。

    とにかく、プログラムの終了後にコンソールウィンドウを保持するために、system("pause")のような「トリック」を使用しないことをお勧めします。プログラムが意味のある作業を終えた後でコンソール環境がハングアップしない場合は、/problemとそれが起こらないように正しく設定する必要があります。一時停止はプログラムの仕事の一部ではありません。

    catch (Type object-name) { code } 
    

    object-nameはオプションですが、Typeではありません。このようなルックスをキャッチ

  • したがって、catch (6)は不正です。他のエラーはこの結果です:あなたが有効なC++ではないものを書いたときに、あなたのプログラムの構文解析がうまくいっています!

あなたのインデントは非常に恐ろしいです。

1

C++は5をキャッチできませんが、C++はintをキャッチできます。 catch(5)のすべてのインスタンスをcatch(int)に変更すると、その問題が解決されます。

はまた、ライン60上で、.....がコメントされていない、といくつかの場所で、あなたがstring s'{'への文字の代わりに、"{"文字列を比較します。

また、Tomalak Geret'kalは、systemexitを呼び出すには、#include <cstdlib>が必要であると指摘しました。

関連する問題