Postfix to infix conversion using stacks
up vote
-1
down vote
favorite
Can someone fix the error?
typedef struct stack
{
int top;
char arr[MAX][MAX];
} stack;
void push(stack *s, char ele)
{
if (s->top == MAX - 1)
{
printf("OVERFLOW");
}
else
{
s->arr[++s->top][MAX] = ele;
}
}
char pop(stack *s)
{
if (s->top == -1)
{
printf("UNDERFLOW");
}
else
{
return s->arr[s->top--][MAX];
}
}
int isOperand(char c)
{
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
return 1;
else
return 0;
}
char conversion(stack *s, char expr)
{
int i, op1, op2, op, l;
char j[20];
l = strlen(expr);
for (i = 0; i < l; i++)
{
if ((isOperand(expr[i])) == 1)
{
push(s, expr[i]);
printf("%cn", s->arr[s->top][MAX]);
}
else
{
op2 = pop(s);
op1 = pop(s);
printf("%cn", op2);
printf("%cn", op1);
snprintf(j, 20, "%s: %s: %s: %s: %s:", '(', op1, expr[i], op2, ')');
push(s, j);
printf("%cn", s->arr[s->top][MAX]);
}
}
return pop(s);
}
int main(void)
{
stack ps;
ps.top = -1;
char expr = "ab*c+";
printf("%cn", conversion(&ps, expr));
return 0;
}
There's an error here. I'm unable to concatenate expression (a*b)
; it's actually not entering the stack. It pushes and pops single characters but with multiple characters it isn't happening. The problem is in the line of snprintf
after concatenating; it's not getting pushed in stack.
c char
add a comment |
up vote
-1
down vote
favorite
Can someone fix the error?
typedef struct stack
{
int top;
char arr[MAX][MAX];
} stack;
void push(stack *s, char ele)
{
if (s->top == MAX - 1)
{
printf("OVERFLOW");
}
else
{
s->arr[++s->top][MAX] = ele;
}
}
char pop(stack *s)
{
if (s->top == -1)
{
printf("UNDERFLOW");
}
else
{
return s->arr[s->top--][MAX];
}
}
int isOperand(char c)
{
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
return 1;
else
return 0;
}
char conversion(stack *s, char expr)
{
int i, op1, op2, op, l;
char j[20];
l = strlen(expr);
for (i = 0; i < l; i++)
{
if ((isOperand(expr[i])) == 1)
{
push(s, expr[i]);
printf("%cn", s->arr[s->top][MAX]);
}
else
{
op2 = pop(s);
op1 = pop(s);
printf("%cn", op2);
printf("%cn", op1);
snprintf(j, 20, "%s: %s: %s: %s: %s:", '(', op1, expr[i], op2, ')');
push(s, j);
printf("%cn", s->arr[s->top][MAX]);
}
}
return pop(s);
}
int main(void)
{
stack ps;
ps.top = -1;
char expr = "ab*c+";
printf("%cn", conversion(&ps, expr));
return 0;
}
There's an error here. I'm unable to concatenate expression (a*b)
; it's actually not entering the stack. It pushes and pops single characters but with multiple characters it isn't happening. The problem is in the line of snprintf
after concatenating; it's not getting pushed in stack.
c char
What does this have to do with pointers?
– Scott Hunter
Nov 11 at 21:17
Welcome to Stack Overflow. Please read the About and How to Ask pages now. You also need to read about how to create an MCVE (Minimal, Complete, and Verifiable example). Amongst other details, that means you'll provide compilable code (or you'll detail the errors you get that prevent it compiling), and you'll describe the input etc. Your code isn't indented which makes it hard to read — in future, please indent your code using spaces (not tabs). Copy'n'paste the code, then select it, then use the{}
button above the edit box to indent it as code.
– Jonathan Leffler
Nov 11 at 23:07
s->arr[++s->top][MAX] = ele;
is a single assigment and is also undefiend behaviour ifs->top == MAX
. You should usestrcpy
to copy strings, you are only copying the pointers to strings, and all point to the variablej
insideconversion
function.
– Kamil Cuk
Nov 12 at 1:38
when im using strcpy im getting a segmentation falt
– user10598529
Nov 12 at 9:41
@jonathanLeffler okay thanks will do so ..can u help me fix my error?
– user10598529
Nov 12 at 10:44
add a comment |
up vote
-1
down vote
favorite
up vote
-1
down vote
favorite
Can someone fix the error?
typedef struct stack
{
int top;
char arr[MAX][MAX];
} stack;
void push(stack *s, char ele)
{
if (s->top == MAX - 1)
{
printf("OVERFLOW");
}
else
{
s->arr[++s->top][MAX] = ele;
}
}
char pop(stack *s)
{
if (s->top == -1)
{
printf("UNDERFLOW");
}
else
{
return s->arr[s->top--][MAX];
}
}
int isOperand(char c)
{
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
return 1;
else
return 0;
}
char conversion(stack *s, char expr)
{
int i, op1, op2, op, l;
char j[20];
l = strlen(expr);
for (i = 0; i < l; i++)
{
if ((isOperand(expr[i])) == 1)
{
push(s, expr[i]);
printf("%cn", s->arr[s->top][MAX]);
}
else
{
op2 = pop(s);
op1 = pop(s);
printf("%cn", op2);
printf("%cn", op1);
snprintf(j, 20, "%s: %s: %s: %s: %s:", '(', op1, expr[i], op2, ')');
push(s, j);
printf("%cn", s->arr[s->top][MAX]);
}
}
return pop(s);
}
int main(void)
{
stack ps;
ps.top = -1;
char expr = "ab*c+";
printf("%cn", conversion(&ps, expr));
return 0;
}
There's an error here. I'm unable to concatenate expression (a*b)
; it's actually not entering the stack. It pushes and pops single characters but with multiple characters it isn't happening. The problem is in the line of snprintf
after concatenating; it's not getting pushed in stack.
c char
Can someone fix the error?
typedef struct stack
{
int top;
char arr[MAX][MAX];
} stack;
void push(stack *s, char ele)
{
if (s->top == MAX - 1)
{
printf("OVERFLOW");
}
else
{
s->arr[++s->top][MAX] = ele;
}
}
char pop(stack *s)
{
if (s->top == -1)
{
printf("UNDERFLOW");
}
else
{
return s->arr[s->top--][MAX];
}
}
int isOperand(char c)
{
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
return 1;
else
return 0;
}
char conversion(stack *s, char expr)
{
int i, op1, op2, op, l;
char j[20];
l = strlen(expr);
for (i = 0; i < l; i++)
{
if ((isOperand(expr[i])) == 1)
{
push(s, expr[i]);
printf("%cn", s->arr[s->top][MAX]);
}
else
{
op2 = pop(s);
op1 = pop(s);
printf("%cn", op2);
printf("%cn", op1);
snprintf(j, 20, "%s: %s: %s: %s: %s:", '(', op1, expr[i], op2, ')');
push(s, j);
printf("%cn", s->arr[s->top][MAX]);
}
}
return pop(s);
}
int main(void)
{
stack ps;
ps.top = -1;
char expr = "ab*c+";
printf("%cn", conversion(&ps, expr));
return 0;
}
There's an error here. I'm unable to concatenate expression (a*b)
; it's actually not entering the stack. It pushes and pops single characters but with multiple characters it isn't happening. The problem is in the line of snprintf
after concatenating; it's not getting pushed in stack.
c char
c char
edited Nov 11 at 23:09
Jonathan Leffler
557k896641016
557k896641016
asked Nov 11 at 21:11
user10598529
1
1
What does this have to do with pointers?
– Scott Hunter
Nov 11 at 21:17
Welcome to Stack Overflow. Please read the About and How to Ask pages now. You also need to read about how to create an MCVE (Minimal, Complete, and Verifiable example). Amongst other details, that means you'll provide compilable code (or you'll detail the errors you get that prevent it compiling), and you'll describe the input etc. Your code isn't indented which makes it hard to read — in future, please indent your code using spaces (not tabs). Copy'n'paste the code, then select it, then use the{}
button above the edit box to indent it as code.
– Jonathan Leffler
Nov 11 at 23:07
s->arr[++s->top][MAX] = ele;
is a single assigment and is also undefiend behaviour ifs->top == MAX
. You should usestrcpy
to copy strings, you are only copying the pointers to strings, and all point to the variablej
insideconversion
function.
– Kamil Cuk
Nov 12 at 1:38
when im using strcpy im getting a segmentation falt
– user10598529
Nov 12 at 9:41
@jonathanLeffler okay thanks will do so ..can u help me fix my error?
– user10598529
Nov 12 at 10:44
add a comment |
What does this have to do with pointers?
– Scott Hunter
Nov 11 at 21:17
Welcome to Stack Overflow. Please read the About and How to Ask pages now. You also need to read about how to create an MCVE (Minimal, Complete, and Verifiable example). Amongst other details, that means you'll provide compilable code (or you'll detail the errors you get that prevent it compiling), and you'll describe the input etc. Your code isn't indented which makes it hard to read — in future, please indent your code using spaces (not tabs). Copy'n'paste the code, then select it, then use the{}
button above the edit box to indent it as code.
– Jonathan Leffler
Nov 11 at 23:07
s->arr[++s->top][MAX] = ele;
is a single assigment and is also undefiend behaviour ifs->top == MAX
. You should usestrcpy
to copy strings, you are only copying the pointers to strings, and all point to the variablej
insideconversion
function.
– Kamil Cuk
Nov 12 at 1:38
when im using strcpy im getting a segmentation falt
– user10598529
Nov 12 at 9:41
@jonathanLeffler okay thanks will do so ..can u help me fix my error?
– user10598529
Nov 12 at 10:44
What does this have to do with pointers?
– Scott Hunter
Nov 11 at 21:17
What does this have to do with pointers?
– Scott Hunter
Nov 11 at 21:17
Welcome to Stack Overflow. Please read the About and How to Ask pages now. You also need to read about how to create an MCVE (Minimal, Complete, and Verifiable example). Amongst other details, that means you'll provide compilable code (or you'll detail the errors you get that prevent it compiling), and you'll describe the input etc. Your code isn't indented which makes it hard to read — in future, please indent your code using spaces (not tabs). Copy'n'paste the code, then select it, then use the
{}
button above the edit box to indent it as code.– Jonathan Leffler
Nov 11 at 23:07
Welcome to Stack Overflow. Please read the About and How to Ask pages now. You also need to read about how to create an MCVE (Minimal, Complete, and Verifiable example). Amongst other details, that means you'll provide compilable code (or you'll detail the errors you get that prevent it compiling), and you'll describe the input etc. Your code isn't indented which makes it hard to read — in future, please indent your code using spaces (not tabs). Copy'n'paste the code, then select it, then use the
{}
button above the edit box to indent it as code.– Jonathan Leffler
Nov 11 at 23:07
s->arr[++s->top][MAX] = ele;
is a single assigment and is also undefiend behaviour if s->top == MAX
. You should use strcpy
to copy strings, you are only copying the pointers to strings, and all point to the variable j
inside conversion
function.– Kamil Cuk
Nov 12 at 1:38
s->arr[++s->top][MAX] = ele;
is a single assigment and is also undefiend behaviour if s->top == MAX
. You should use strcpy
to copy strings, you are only copying the pointers to strings, and all point to the variable j
inside conversion
function.– Kamil Cuk
Nov 12 at 1:38
when im using strcpy im getting a segmentation falt
– user10598529
Nov 12 at 9:41
when im using strcpy im getting a segmentation falt
– user10598529
Nov 12 at 9:41
@jonathanLeffler okay thanks will do so ..can u help me fix my error?
– user10598529
Nov 12 at 10:44
@jonathanLeffler okay thanks will do so ..can u help me fix my error?
– user10598529
Nov 12 at 10:44
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53253273%2fpostfix-to-infix-conversion-using-stacks%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What does this have to do with pointers?
– Scott Hunter
Nov 11 at 21:17
Welcome to Stack Overflow. Please read the About and How to Ask pages now. You also need to read about how to create an MCVE (Minimal, Complete, and Verifiable example). Amongst other details, that means you'll provide compilable code (or you'll detail the errors you get that prevent it compiling), and you'll describe the input etc. Your code isn't indented which makes it hard to read — in future, please indent your code using spaces (not tabs). Copy'n'paste the code, then select it, then use the
{}
button above the edit box to indent it as code.– Jonathan Leffler
Nov 11 at 23:07
s->arr[++s->top][MAX] = ele;
is a single assigment and is also undefiend behaviour ifs->top == MAX
. You should usestrcpy
to copy strings, you are only copying the pointers to strings, and all point to the variablej
insideconversion
function.– Kamil Cuk
Nov 12 at 1:38
when im using strcpy im getting a segmentation falt
– user10598529
Nov 12 at 9:41
@jonathanLeffler okay thanks will do so ..can u help me fix my error?
– user10598529
Nov 12 at 10:44