在堆栈中移动元素

时间:2017-12-08 15:24:11

标签: c++ data-structures stack

我有一个使用数组实现的Stack,它需要6个字符作为用户的输入(Small Case和Upper Case Letters)。然后将大写字母转移到另一个堆栈(将其从原始堆栈中删除)

我有以下代码,它将堆栈中的元素移动到顶部,然后在顶部将其弹出并将其推送到新阵列上。

for (int i = P->top(); i >= 0; i--)
{
  if (P->data[i] >= 65 && P->data[i] <= 90)
  {
    for (int j = i; j < P->top(); i++)
    {
      char swap = P->data[i + 1];
      P->data[i + 1] = P->data[i];
      P->data[i] = swap;
      stackT.push(P->pop());
      i = P->top();
    }
  }
}

我应该有另一个大写字母的数组和原始的小写字母数组。

它得到奇怪的结果,有时它完全破坏原始数组,有时它只传输一个大写元素并搞砸其他元素。

我只是出于想法。

是的,问题仅限于使用Stacks而不是它不是家庭作业。

提前致谢!

1 个答案:

答案 0 :(得分:0)

不要乱把移到堆栈中。

而是使用第三个临时堆栈。

stack original = .. whatever ...;
stack uppercase;
stack other;
// Classify the contents
while (!original.empty())
{
    char c = original.top();
    original.pop();
    if (std::isupper(c))
    {
        uppercase.push(c);
    }
    else
    {
        other.push(c);
    }
}
// Restore the non-uppercase stack.
while (!other.empty())
{
    original.push(other.top());
    other.pop();
}