【发布时间】:2016-11-11 15:20:07
【问题描述】:
所以这是我大学的作业。我必须从文本文件中的一行读取波兰符号。文本文件中的表达式是:“/2 3”,我必须把它变成一个反向波兰符号。我不断收到此错误:0xC0000005:访问冲突读取位置 0x00000000。
int top = -1;
char prefix[50];
void Push(char value)
{
top++;
prefix[top] = value;
}
void Pop()
{
if (top < 0)
cout << "The stack is empty." << endl;
else
{
top--;
}
}
char Top()
{
return prefix[top];
}
void Display()
{
for (int i = 0; i <= top; i++)
cout << prefix[i] << " ";
}
bool isOperator(char c)
{
if (c == '+' || c == '-' || c == '*' || c == '/')
return true;
else
return false;
}
char c;
char postfix[50];
int top2 = -1;
void Push2()
{
top2++;
postfix[top2] = Top() + Top() + c;
}
void Display2()
{
{
for (int i = 0; i <= top2; i++)
cout << postfix[i] << " ";
}
};
void PrefixToPostfix()
{
for (int *i = 0; *i <= top2; i++)
{
c = prefix[*i];
if (isOperator)
{
Push2();
}
else
{
top2++;
postfix[top2] = c;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char value;
char c;
ifstream file("Prefix.txt");
while (file >> value)
{
Push(value);
}
file.close();
PrefixToPostfix();
Display();
Display2();
cout << endl;
system("PAUSE");
return 0;
}
我认为错误可能在我的这部分代码中:
void PrefixToPostfix()
{
for (int *i = 0; *i <= top2; i++)
{
c = prefix[*i];
如果有人可以帮助我,我将非常感激,因为我必须在 5 小时内交作业。 :)
【问题讨论】:
-
请停止尝试通过反复试验来学习 C++,它会让你一事无成。而是从一本好书中系统地学习它。
-
你肯定步入了未初始化的内存。就像你的
prefix数组一样。你的 for 循环看起来很可疑。 -
这个
for (int *i = 0使i成为NULL 指针,而下一个*i将失败。
标签: c++ pointers access-violation