OPER.push(s[i]);
}
}
while (!OPER.empty())
{
arg2 = OPND.top();
OPND.pop();
arg1 = OPND.top();
op = OPER.top();
OPER.pop();
output_file << "(" << step << ")";
cout<< "(" << step << ")";
step++;
sTemp = _itoa(step, sChange, 10);
sTemp = "T" + sTemp;
OPND.push(sTemp);
output_file <<"("<< op << "," << arg1 << "," << arg2 << "," << sTemp <<")"<<
endl;
cout<<"("<< op << "," << arg1 << "," << arg2 << "," << sTemp <<")"<< endl;
}
return 0;
}
设计两个栈 opnd 和 opdr 分别作为操作数和操作符的操作栈,分别将两个操作数
和一个操作数进栈,将后一个操作符和栈中的操作数进行优先级比较。将优先级
大的操作符赋值给 op,并将栈顶操作数赋值给 right 栈底操作数赋值给 left,
将 step 加 1,并将 step 通过_itoa 函数转换成字符窜型和‘T’一起赋值给
Tstring。。。通过文本的操作语句输出到文本中。
三元式转换函数
int translate1(string s)
{
stack OPND;
stack OPER;
char op;
string arg1, arg2;
int step = 0;
char sChange[10];
string sTemp;
cout << "转换成三元式:" << endl;
output_file << "转换成三元式:" << endl;
for (int i=0; i<(int)s.length(); i++)
{
if ( (s[i]>='0' && s[i]<='9') || (s[i]>='a' && s[i]<='z') )
{
sTemp = "";
sTemp += s[i];
OPND.push(sTemp);
}
else
{
while (!OPER.empty() && outstack(s[i])
cout << "(" <> s;
output_file.open(Schange_file,ios::out);
translate(s);
output_file.close();
cout << endl;
}
return 0;
}
进行文本输错操作,先判断是否正确打开文本,如果打开,则将执行完毕的内容
输入到文本中并保存。
第四章
程序测试
在程序的文件夹里,新建一个”f.txt”文档,利用程序的输入/输出,完成实验要求。另外
不运用输入输出功能也可得出结果,运行结果如下:
输入:
a=b+(c-d)*e+f/g
程序运行执行后结果: