我正在Visual Studio 2019上编写此代码,它将前缀数字转换为中缀。 当我按F5键时,窗口显示:(进程10428)以代码0退出。 要在调试停止时自动关闭控制台,请启用工具->选项->调试->在调试停止时自动关闭控制台。
我对C ++不太了解。我非常了解Java和python,但是我们的老师希望我们使用C ++。
string s[7];
int f = -1;
void push(string a)
{
s[f++] = a;
}
string pop()
{
return s[f--];
}
bool isop(char x) {
switch (x)
{
case '+':
case '-':
case '*':
case '/':
return true;
}
return false;
}
int main() {
string a = "*+ab+cd";
reverse(a.begin(), a.end());
for (int i = 0;i<int(a.length());i++) {
if (isop(a[i])) {
string v1 = pop();
string v2 = pop();
string h = "(" + v1 + a[i] + v2 + ")";
push(h);
}
else {
push(string(1, a[i]));
}
}
for (int i = 0;i < 7;i++)
{
cout << s[i];
}
return 0;
}
答案 0 :(得分:1)
这里的问题(与Java完全相同)
string s[7];
int f = -1;
void push(string a)
{
s[f++] = a;
}
第一次按下f
是-1
,因此您具有超出范围的数组访问权限。我猜你是这个意思
void push(string a)
{
s[++f] = a;
}
您可以通过使用std::vector
(类似于Java中的ArrayList)来避免此错误。