在 SPOJ 上出现运行时错误 (SIGSEGV),无法找出我的代码中出了什么问题



我知道以前有人问过这种类型的问题,但我找不到解决方案,我知道这是一个无效的内存引用错误或数组越界,但我似乎在代码中找不到错误的原因。我刚刚在SPOJ上尝试了这个问题,它是"转换表达式"https://www.spoj.com/problems/ONP/我所有的测试用例都是对的!

这是我的代码:

#include <bits/stdc++.h>
#include<string>
using namespace std;

int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long long int t;
string str;
std::stack<char> f ;
cin>>t;
while(t--){
cin>>str;
string ans="";
for(int i=0;i<str.size();i++){
switch(str[i]){
case '(':break;
case '+':
case '*':
case '-':
case '^':
f.push(str[i]);
break;
case ')':
ans+=f.top();
f.pop();
break;
default:
ans+=str[i];
break;
}
}
cout<<ans<<endl;

}
return 0;
}
#include <bits/stdc++.h>
using namespace std;

int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long long int t;
cin>>t;
while(t--){
string str;
std::stack<char> f ;
cin>>str;
string ans="";
for(int i=0;i<str.size();i++){
switch(str[i]){
case '(':
break;
case '+':
case '*':
case '/': // Change 1
case '-':
case '^':
f.push(str[i]);
break;
case ')':
if(f.size()>0){  // Change 2
ans+=f.top();
f.pop();
}
break;
default:
ans+=str[i];
break;
}
}
if(f.size()>0){
while(f.size()>0){
ans+=f.top();
f.pop();
}
}
cout<<ans<<endl;

}
return 0;
}

你的代码中有两个错误

  1. 您忘记添加"/"(这会导致WA(
  2. 如果堆栈仍然是空的,则代码将其添加到字符串中并弹出空堆栈

(我对你的代码做了一些更改(

最新更新