Nyoj 467【接尾辞】
2860 ワード
/*
:1000 ms | :65535 KB
:3
, “ ” ,
, , 。
n, n (n<10)。
, 1000 , , “=” 。 +-*/ /*
。 。 。
0
, 。
2
1.000+2/4=
((1+2)*5+1)/4=
1.000 2 4 / + =
1 2 + 5 * 1 + 4 / =
*/
#include<stdio.h>
#include<string.h>
char out[1010], stack[1010], s[1010];
int l1, l2;
int main()
{
int i, j, k, m, n;
scanf("%d", &n);
getchar();
while(n--)
{
gets(s);
m = strlen(s);
l1 = k = l2 = 0;
for(i = 0; i < m-1; i++)
{
if(s[i] >= 48 && s[i] <= 57 || s[i] == '.')
{
if(k)
{
out[l2++] = ' ';
k = 0;
}
out[l2++] = s[i];
}
else if(s[i] == '-' || s[i] == '+')
{
for(j = l1-1;j >= 0; j--)
{
if(stack[j] != '(')
{out[l2++] = ' ';
out[l2++] = stack[j];
l1--;
}
else
{
break;
}
}
stack[l1++] = s[i];
k =1;
}
else if(s[i] == '*' || s[i] == '/')
{
for(j = l1-1; j >= 0; j--)
{
if(stack[j] == '*' || stack[j] == '/')
{
out[l2++] = ' ';
out[l2++] = stack[j];
l1--;
}
else
break;
}
stack[l1++] = s[i];
k = 1;
}
else if(s[i] == '(')
{
stack[l1++] = s[i];
k = 1;
}
else if(s[i] == ')')
{
for(j = l1-1; j >= 0; j--)
{
if(stack[j] != '(')
{
out[l2++] = ' ';
out[l2++] = stack[j];
l1--;
}
else
{
l1--;
break;
}
}
}
}
while(l1)
{out[l2++] = ' ';
out[l2++] = stack[l1-1];
l1--;
}
out[l2] = '\0';
for(i = 0; i < l2 ; i++)
{
if(out[i] != ' ')
{
for(j = i; j < l2; j++)
{
printf("%c", out[j]);
}
printf(" =
");
break;
}
}
}
return 0;
}
ここで扱いにくいのは出力時のスペースです