在文本文件中查找中缀表达式的后缀形式
Posted
技术标签:
【中文标题】在文本文件中查找中缀表达式的后缀形式【英文标题】:Finding postfix form of infix expressions in a text file 【发布时间】:2020-04-22 20:51:11 【问题描述】:我正在尝试查找中缀表达式的后缀形式。我的程序应该在给定的文本文件中读取并计算它。该程序读取文件并向我显示中缀形式,但它不计算中缀表达式的后缀形式。我无法理解问题出在哪里。我的意思是,我不知道问题出在 main() 函数还是 convertToPostfix 函数中。我应该怎么做才能解决这个问题?
主要功能:
int main()
infixToPostfix<string> exp;
string getcontent;
ifstream infile;
infile.open("infixData.txt");
if (infile.is_open())
while (!infile.eof())
exp.showInfix();
infile >> getcontent;
cout << getcontent << endl;
exp.convertToPostfix();
exp.getPfx();
exp.showPostfix();
return 0;
还有converToPostfix()函数:
template <class Type>
void infixToPostfix<Type>::convertToPostfix()
stackType<string> obj;
stackType<char> x;
int i = 0, j=0;
while (infx[i] != '\0')
if ((infx[i] >= 'a' && infx[i] <= 'z') || (infx[i] >= 'A' && infx[i] <= 'Z'))
pfx[j] += infx[i];
else if (infx[i] == '(')
obj.push("(");
else if (infx[i] == ')')
while (obj.top() != "(")
pfx += obj.top();
obj.pop();
if (obj.top() == "(")
obj.pop();
else
while (precedence(x.top(), infx[i]))
pfx += obj.top();
obj.pop();
j++;
obj.push(infx);
i++;
cout << pfx << endl;
我的“infixData.txt”文件:
A+B-C;
(A+B)*C;
(A+B)*(C-D);
A+((B+C)*(E-F)-G)/(H-I);
A+B*(C+D)-E/F*G+H;
2+4-1;
(6+3)*2;
showInfix():
template <class Type>
void infixToPostfix<Type>::showInfix()
cout << endl;
cout << "Infix expression: " << infx;
【问题讨论】:
当然主要功能很奇怪。您似乎正在将中缀表达式读入一个名为getcontent
的变量中,对吗?但是您的convertToPostfix
例程在一个名为infx
的变量上运行,并且没有给出如何设置的线索。需要更多代码。以及有关文件 infixData.txt 中内容的详细信息。
然后有一个奇怪的方法showInfix
没有给出关于它可能在做什么的线索。总体而言,代码看起来杂乱无章且晦涩难懂,但没有足够的信息来准确诊断问题所在。
【参考方案1】:
所以这似乎是代码组织的问题。您根本没有以可能的方式使用程序中的变量。您正在将文件读入一个变量,但使用完全不同的变量来尝试解决问题。
这是你应该做的,将中缀表达式读入 main 中的一个变量,然后你将该变量作为参数传递给计算后缀表达式的函数。像这样
infile >> getcontent;
cout << getcontent << endl;
convertToPostfix(getcontext);
那么convertToPostfix
应该是这样的函数
void convertToPostfix(const std::string& infx)
...
不需要有一个名为infixToPostfix
的类,只需编写函数来完成工作,而不是类。
你真的需要阅读,如何编写函数,如何将参数传递给函数以及从函数返回值。这是一个非常基本的技能。目前你显然不理解它,但你理解它绝对是至关重要的。
您的代码还包含许多高级功能,例如类和模板,这些对于此任务是不必要的,并且在您尚未掌握基础知识时无论如何都不应该使用。
我猜你是从某个地方复制了convertToPostfix
函数。您应该意识到它并不能完全解决您遇到的问题。它处理的字符串格式与您拥有的字符串格式略有不同。不知道你能看出区别吗?
【讨论】:
以上是关于在文本文件中查找中缀表达式的后缀形式的主要内容,如果未能解决你的问题,请参考以下文章