1

初めて spoj でソリューションを送信しようとしていますが、これは spoj で式を変換する問題を解決するための私のソリューションです。実行時エラー、セグメンテーション違反である SIGSEV エラーが発生しています。私は自分のコードで多くのことをチェックしましたが、コードにそのような種類のエラーは見られません。これを解決するのを手伝ってください。

私は編集されたコードを持っています:-

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int precedence(char c)
{
switch (c)
{
    case '/':
        return 2;

    case '*':
        return 2;

    case '+':
        return 1;

    case '-':
        return 1;

    case '^':
        return 3;

    case ')':
        return 4;

    case '(':
        return -1;

    default:
        return -1 ;
}
}

int main()
{
 //char input[400]="a*(b+c)-d/e";
 // char input[400]="a+b*c-d/e*f";
 // char input[400] = "(a+b*c-d)/(e*f)";
 // char input[400] = "(a+(b*c))" ;
 //char input[400] = "((a+b)*(z+x))";
 // char input[400] = "((a+t)*((b+(a+c))^(c+d)))";
 char input[402];
 char *stack;
 char *output;
 char *p = input ;
 int i , top  , t  , l ;


scanf("%d",&t);


while (t-- != 0 )
{
    scanf("%s",input);
    p = input ;
    i = 0 ;
    top = 0 ;
    l = strlen(input);
    stack = (char *)malloc(sizeof(strlen(input)));
    output = (char *)malloc(sizeof(strlen(input)));


    stack[top++]='(';

    *(p+l)=')';
    *(p+l+1)= '\0';


    while(p[0] != '\0')
    {
        if (p[0] >= 'a' && p[0] <= 'z' )
        {
            output[i]=p[0];
            i++;
        }
        else if (p[0] == '(')
        {
            stack[top++] = p[0];
        }
        else if (p[0] == ')')
        {
            while (stack[top-1] != '(')
            {
                --top;
                output[i] = stack[top];

                i++ ;
            }
            //to remove the left parenthesis
            top--;

        }
        else if (p[0] == '+' || p[0] == '-' || p[0] == '*' || p[0] == '/' || p[0]=='^')
        {
            while(precedence(stack[top-1]) >= precedence(p[0]))
            {
                output[i]=stack[top-1];
                top--;
                i++;
                //j = k;
            }
            stack[top] = p[0];
            top++;
        }

        p++;
    }
    printf("%s\n",output);
    free(stack);
    free(output);

for(i = (strlen(input)-1) ; i >= 0 ; i--)
    input[i]='\0';


}

return 0 ;
}
4

1 に答える 1