これが解決策です。完全なもの(整数除算など)ではありませんが、アルゴリズムを示しています。
これは非常に単純です。演算子を左から右に削除し、削除するたびに配列を左に 1 つずつシフトするだけです。「*」および「/」は、「+」および「-」よりも優先されます。コードは冗長であり、焼き付けられた入力のみを解決します。それを関数に分割するのはあなたの仕事です。
ここにあります:
#include <stdio.h>
int main()
{
int nums[8]={1,5,8,2,5,3,4,7};
int cnums = 8;
char ops[7]={'+','-','/','*','+','-','*'};
int cops=7;
int flag =1;
int i,j;
while(flag)
{
flag=0;
for(i=0;i<cnums;i++)
if(ops[i]=='*' || ops[i]=='/')
{
if(ops[i]=='*')
nums[i]*=nums[i+1];
else
nums[i]/=nums[i+1];
flag=1;
for(j=i;j<cops;j++)
{
ops[j]=ops[j+1];
nums[j+1]=nums[j+2];
}
cnums--;
cops--;
break;
}
}
flag=1;
while(flag)
{
flag=0;
for(i=0;i<cnums;i++)
if(ops[i]=='+' || ops[i]=='-')
{
if(ops[i]=='+')
nums[i]+=nums[i+1];
else
nums[i]-=nums[i+1];
flag=1;
for(j=i;j<cops;j++)
{
ops[j]=ops[j+1];
nums[j+1]=nums[j+2];
}
cnums--;
cops--;
break;
}
}
return 0;
}
このLINKで動作することがわかります。
形式言語に精通している場合は、このような問題が発生したときにYACCを試すことをお勧めします。