最近在做ACM上的题目,在vs上写了一个括号配对的程序能运行出来,但是放到ACM上就是各种错误,最多的是runtimeerror,下面附上程序,希望高手能指点一下。。
#include
#include
#include
#include
using namespace std;
int main()
{
int N; //测试数据组
cin>>N;
if(N100)
{
cout<<"please input number 0<n<100"<<endl;
return 1;
}
vector<string> vec;
vector<int> mark; //存放结果
string s=" ";
for(int i=0;i<N;i++)
{
cin>>s;
if(s.size()==0||s.size()>10000)
{
cout<<"input error"<<endl;
i--;
continue;
}
vec.push_back(s);
}
stack<char> st;
vector<string>::iterator iter;
int j=0;
for(iter=vec.begin();iter!=vec.end();iter++)
{
st.push((*iter)[0]);
for(int t=1;t!=(*iter).size();t++)
{
if(((*iter)[t]=='(')||((*iter)[t]=='['))
st.push((*iter)[t]);
else if((*iter)[t]==')')
{
if(st.top()=='(')
st.pop();
else if(st.top()!='(')
st.push((*iter)[t]);
}
else if((*iter)[t]==']')
{
if(st.top()=='[')
st.pop();
else if(st.top()!='[')
st.push((*iter)[t]);
}
}
if(st.empty())
mark.push_back(1);
else
mark.push_back(0);
}
for(vector<int>::iterator it=mark.begin();it!=mark.end();it++)
{
if(*it)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}
该回答引用ChatGPT
这段代码看起来比较长,可能会有一些小问题,下面是一些可能导致 runtime error 的地方:
下面是一个修改过的代码片段,可以作为参考:
int main() {
int N;
cin >> N;
if (N <= 0 || N > 100) {
cout << "please input number 0<n<100" << endl;
return 1;
}
vector<string> vec;
vector<int> mark;
string s;
for (int i = 0; i < N; i++) {
cin >> s;
if (s.empty() || s.length() > 10000) {
cout << "input error" << endl;
i--;
continue;
}
vec.push_back(s);
}
stack<char> st;
for (string s : vec) {
st = stack<char>(); // 每次处理一个新字符串时清空栈
bool valid = true;
for (char c : s) {
if (c == '(' || c == '[') {
st.push(c);
} else if (c == ')') {
if (st.empty() || st.top() != '(') {
valid = false;
break;
}
st.pop();
} else if (c == ']') {
if (st.empty() || st.top() != '[') {
valid = false;
break;
}
st.pop();
}
}
mark.push_back(st.empty() && valid);
}
for (bool m : mark) {
cout << (m ? "yes" : "no") << endl;
}
return 0;
}