Реализация стека для оценки выражений

Я написал следующий код, чтобы определить, имеет ли выражение, введенное пользователем, правильную последовательность скобок или нет, например, если пользователь вводит [a*(b+c)], все в порядке. Но если он входит [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)

Подскажите пожалуйста, как подключить эти ошибки?

2 ответа

Решение
  • system находится в шапке cstdio, но вы не сделали #include этот заголовок.

    Во всяком случае, лучше не использовать такие "хитрости", как system("pause") сохранить окно консоли после завершения вашей программы: если ваша консольная среда не зависает после того, как ваша программа закончила свою значимую работу, то это ошибка / проблема вашей консольной среды, и вы должны правильно ее настроить, чтобы этого не произошло. Приостановка не является частью работы вашей программы.

  • Ловля выглядит так:

    catch (Type object-name) { code }
    

    object-name необязательно, но Type не является.

    Следовательно catch (6) плохо сформирован. Другие ошибки являются результатом этой ошибки: разбор вашей программы становится совершенно бесполезным, когда вы пишете вещи, которые не являются допустимыми для C++!

И твой отступ довольно ужасен.

C++ не может поймать 5, но C++ может поймать int, Изменить все экземпляры catch(5) в catch(int) и это решит эту проблему.

Кроме того, в строке 60 ..... не комментируется, и в нескольких местах вы сравниваете string s в '{' символы вместо "{" строки.

Также Томалак Гереткаль отметил, что нужно #include <cstdlib> для system а также exit звонки.

Другие вопросы по тегам