xiaoxiaochenxuan 2014-07-01 03:06 采纳率: 0%
浏览 1136

c++编写的ACM中的括号配对问题

最近在做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;

}

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-13 13:00
    关注

    该回答引用ChatGPT

    这段代码看起来比较长,可能会有一些小问题,下面是一些可能导致 runtime error 的地方:

    • 在处理输入时,检查输入的字符串长度是否合法,如果长度大于 10000,那么可能会导致栈溢出等问题,需要特别注意。
    • 在处理括号时,应该先判断栈是否为空,如果栈为空,直接调用栈的 top() 方法会导致 runtime error。
    • 在处理括号时,如果栈顶元素与当前字符不匹配,应该把当前字符压入栈中,而不是继续操作栈顶元素。
    • 对于一些边界情况,例如输入的字符串为空或测试数据组数超过 100,应该在代码中添加对应的判断逻辑。

    下面是一个修改过的代码片段,可以作为参考:

    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;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决
  • ¥15 关于华为5g模块mh5000-31接线问题
  • ¥15 keil L6007U报错