我有一个使用数组实现的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而不是它不是家庭作业。
提前致谢!
答案 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();
}