کمک در رفع مشکل c++

miladanimator

Active Member
سلام دوستان.

من یک برنامه باید داشته باشم که یک عبارت infix رو دریافت کنه و یک عبارت prefix رو بده

حالا من کد زیر رو visual studio نوشتم :

کد:
#include <stdafx.h>
#include <iostream>
#include <cstdlib>
#include <string.h>
#include <stack>




using namespace std;

int priority(char op);

int main()
{
    char ar[80];
    stack<char> s_1, s_2;
    cin >> ar;

    int length = strlen(ar);

    for(int i = length - 1; i >= 0; i--)
    {
        switch(ar[i])
        {
   case '(':
s_1.push(ar[i]);
break;
case ')':
{
while(s_1.top() != '(')
{
s_2.push(s_1.top());
s_1.pop();
}
s_1.pop();
break;
}
            case '+':  case '-':  case '*': case '/':
            {
                while(priority(s_1.top()) > priority(ar[i]))
                {
                    s_2.push(s_1.top());
                    s_1.pop();
                }
                s_1.push(ar[i]);
                break;
            }
            default:
            {
                s_2.push(ar[i]);
                break;
            }
        }

    }
    while(!s_1.empty())
    {
        s_2.push(s_1.top());
        s_1.pop();
    }

    while(!s_2.empty())
    {
        cout << s_2.top();
        s_2.pop();
    }

    cout << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

int priority(char op)
{
    int p;
    switch (op)
    {
        case '+' :
        case '-' :
             p = 1;
             break;
        case '*' :
        case '/' :
             p = 2;
             break;
        default:
             p = 0;
             break;
    }
    return p;

}
اما موقع اجرا زمانی که ورودی بهش میدم (مثلا ورودی a+b/e) با خطائی که در عکس هست مواجه می شم . کسی می تونه کمک کنه این خطا از چیه ؟ کجای کد مشکل داره؟
 

پیوست ها

  • Untitled-1.gif
    Untitled-1.gif
    16.6 کیلوبایت · بازدیدها: 5
آخرین ویرایش:

the_king

مدیرکل انجمن
اما موقع اجرا زمانی که ورودی بهش میدم (مثلا ورودی a+b/e) با خطائی که در عکس هست مواجه می شم . کسی می تونه کمک کنه این خطا از چیه ؟ کجای کد مشکل داره؟
اشکال از بخش بررسی اولویت عملگر ها است، شرط اولیه اینه که ببینید پشته خالی هست یا نه، چون
اگه خالی باشه عملگری داخلش نیست که با عملگر جدید مقایسه اش کنید :

کد:
            case '+':  case '-':  case '*': case '/':
[B][COLOR="DarkRed"]                while(priority(s_1.top()) > priority(ar[i]))[/COLOR][/B]
                {
                    s_2.push(s_1.top());
                    s_1.pop();
                }
                s_1.push(ar[i]);
                break;

چون شما اول خالی بودن پشته رو بررسی نکردید، موقع مقایسه کردن اولویت عملگر ها با خطای خالی بودن پشته
مواجه می شوید. باید شرط اصلی خالی نبودن پشته رو در نظر بگیرید :
کد:
            case '+': case '-': case '*': case '/':
[B][COLOR="Blue"]                while(!s_1.empty())[/COLOR][/B]
                {
[B][COLOR="Blue"]                    if (priority(s_1.top()) <= priority(ar[i]))
                        break;
[/COLOR][/B]                    s_2.push(s_1.top());
                    s_1.pop();
                }
                s_1.push(ar[i]);
                break;
 

جدیدترین ارسال ها

بالا