C++ 使用堆栈测试字符串中x和y的相等数量

C++ 使用堆栈测试字符串中x和y的相等数量,c++,stack,C++,Stack,我正在研究一个函数,它测试字符串中是否有相同数量的x和y。我希望有人能告诉我如何修复这个函数。 我假设字符串只包含x和y。 我认为这个代码看起来不错,但当我用不同顺序的字母追踪它时,它并没有起作用 这是我的密码: bbool equal(string Letters){ stack<string>a_stack; for(int i=0; i<Letters.length(); i++){ if(s[i]=='x') a_stack.push(Lette

我正在研究一个函数,它测试字符串中是否有相同数量的x和y。我希望有人能告诉我如何修复这个函数。 我假设字符串只包含x和y。 我认为这个代码看起来不错,但当我用不同顺序的字母追踪它时,它并没有起作用

这是我的密码:

bbool equal(string Letters){
stack<string>a_stack;
for(int i=0; i<Letters.length(); i++){
    if(s[i]=='x')
        a_stack.push(Letters[i]);
}
for(int j=0; j<Letters.length(); j++){
    if(s[j]=='y')
        a_stack.pop();
}
if(a_stack.empty())
    return true;
else
    return false;
bbool相等(字符串字母){
stacka_stack;

对于(int i=0;i由于您使用它的方式所述的原因,单个堆栈不起作用。您可以使用两个堆栈,一个用于x,一个用于y,然后比较大小


或者,您可以使用一个堆栈,将1推到x,将-1推到y。然后对堆栈求和。如果它们相等,则总和将为0。

如果第一个字符不是
x
,会发生什么情况?为什么不使用两个计数器?
如果(条件)return true;else return false;
是非常冗余的。只需使用
返回条件;
即可。什么是
字母[i].push();
应该做什么?(换句话说,你永远不会将
推到
相等的堆栈上
应该是
相等的堆栈。push(“foo”)
而不是
字母[i]。push()
?那么我如何才能对一个字符串使用两个堆栈呢?如果字母[I]='x',在x_堆栈中推一个值,否则在y_堆栈中推一个值(假设字符串中只有x或y)。这就是我正在做的事情,但是当我在这里推时,我一直得到一个错误。x_stack.push(字母[I])
a_stack.push(字母[I])
不是问题所在。当堆栈为空时,问题在于
a_stack.pop();
当字符串为'xyy'或'yx'时,迭代代码。如果堆栈为空时,代码调用'a_stack.pop()',它将抛出。如果要使用单个堆栈,则只推送整数(1代表x,-1代表y),然后遍历堆栈并对值求和。sum==0表示有相同数量的xs和ys。sum>0表示有更多的xs。sum<0表示有更多的ys。