Программа по переводу из постфиксной формы записи в инфиксную с использованием скобок - C (СИ)
Формулировка задачи:
c проверкой на правильность ввода, записанная в буквенном виде
Решение задачи: «Программа по переводу из постфиксной формы записи в инфиксную с использованием скобок»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int ptrS;
char *Stack[100];
void push(char *S)
{
char *v;
int l;
l=strlen(S)+1;
v=(char *) calloc(1,l);
strcpy(v,S);
Stack[ptrS++]=v;
}
char *pop()
{
return Stack[--ptrS];
}
char *post2inf(char *Stri)
{
int i,j,l,p,k;
char curr[10],c;
char *a1, *a2;
char res[200];
l=strlen(Stri);
for (j=0; j<10; j++) curr[j]=0;
p=0;
for (i=0; i<l; i++)
{
c=Stri[i];
if ((c == '+') ||
(c == '-') ||
(c == '*') ||
(c == '/') ||
(c == ' '))
{
if (p > 0)
{
push(curr);
for (j=0; j<10; j++) curr[j]=0;
p=0;
}
if (c != ' ')
{
a2=pop();
a1=pop();
for(j=0; j<200; j++) res[j]=0;
strcpy(res,"(");
strcat(res,a1);
k=strlen(res);
res[k]=c;
strcat(res,a2);
strcat(res,")");
free(a1);
free(a2);
push(res);
}
}
else
curr[p++]=c;
}
return Stack[0];
}
int main(int argc, char* argv[])
{
int i;
char *F="xx aa bb cc + * -"; /* формула в ОПЗ */
char *R;
ptrS=0;
for (i=0; i<100; i++) Stack[i]=NULL;
R=post2inf(F);
printf("%s \n",R);
free(R);
return 0;
}