【发布时间】:2020-07-27 02:19:51
【问题描述】:
嘿,我正在解决一个堆栈问题,我已经为它编写了逻辑,但是当我运行我的程序时。 并提供 3 作为输入。
(a+(b*c))+(d/e)
((())(()))
((((()
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<stack>
using namespace std;
int main()
{
long int t;
cin>>t;
while(t--){
stack< pair<char,int> > stk1;
string s;
cin>>s;
// getline(cin, s);
vector<int> vect;
int i=0,k=1,l=1;
while(s[i] != '\0' ){
if(s[i]=='('){
stk1.push( {'(' , k} );
vect.push_back(k);
k++;
}
else if( s[i]== ')'){
if(stk1.empty()){
vect.push_back(l);
l++;
}else{
vect.push_back( stk1.top().second);
stk1.pop();
}
}
i++;
}
for(int z=0;z<vect.size();z++){
cout<<vect[z]<<" ";
}
cout<<"\n";
}
return 0;
}
【问题讨论】:
-
为什么你提供
while(i--)它应该像while(i=lastLimit) -
@Analyst
while(i=lastLimit)有一些问题,另外我没有在你的评论和问题之间建立联系,所以我无法验证我认为你打算写的逻辑。 -
在这样一个小而简单的程序中,您应该能够通过调试器单步调试或使用其他调试技术检查实际程序状态并将其与您的预期进行比较来快速找到问题.
-
@paddy 我知道如何调试代码,但我找不到错误。我做了很多问题,但这是我第一次遇到这个问题。
-
@Analyst 我写了 ``` while(t--)``` 这意味着它将运行 t 次。和写最后一个限制一样。