Поиск в стеке значения и сохранение в временном стеке - PullRequest
0 голосов
/ 15 октября 2011

В основном, внутри этого цикла в случае: e / E .. Я собираюсь вытолкнуть предмет из оригинальной стопки, сохранить его во временном gumball, а затем посмотреть на цветовое поле этого временного gumball. Если это то, что я хочу, то у меня есть матч, и его счетчик увеличивается. Если нет, наденьте резинку на временную стопку. Затем повторяйте этот процесс, пока я не найду то, что хочу, или исходный стек не станет пустым. Кроме того, когда съеден каждый гамбол, выведите количество его перемещений, потому что он блокировал другие гамболлы. Когда я говорю, чтобы поесть, он говорит, что не найден, и я не могу понять, почему. Любые предложения ??

Мой основной выглядит так (цикл, с которым у меня проблемы, в случае е):

#include <iostream>
#include "Stack.h"
#include "Gumball.h"

using namespace std;

int main()
{
  Stack s, gumballStack;
  Gumball g, temp;
  char choice;
  bool choice_flag = true;

do {
    cin >> choice;
    cin >> g.color;
    switch(choice)
    {
        case 'b':
        case 'B':
            cout << "A" << " " << g.color << " gumball has been bought." << endl << endl;
            g.counter = 0;
            s.isempty();
            s.push(g);
            if(!s.isfull())
                cout << "The gumball is" << " " << g.color << " and has been stored." << endl << endl;
            else
                cout << "There is no room for another gumball." << endl << endl;
            break;
        case 'e':
        case 'E':
            //s.pop();
            s.pop() = temp;
            while(!s.isempty() && temp.color != g.color)
            {
                s.pop().counter++;
                gumballStack.push(temp);
                s.pop();
                cout << " " << g.counter << endl;
            }
            if(!s.isempty())
            {
                //cout << " " << g.counter++ << endl;
                 s.pop();
                cout << "A gumball has been eaten." << endl << endl;
               // cout << "A" << " " << g.color << " was not found." << endl << endl;
            }
            else
            {
                cout << "A" << " " << g.color << " was not found." << endl << endl;
            }
            while(!gumballStack.isempty())
            {
                gumballStack.pop();
                s.push(gumballStack.pop());
                gumballStack.pop();
            }
            break;
        case 'q':
        case 'Q':
            choice_flag = false;
            break;
    }
} while(choice_flag);

return 0;
}

1 Ответ

0 голосов
/ 15 октября 2011

В вашем коде есть некоторые проблемы (извините за грубость): 1. вы можете использовать std :: vector, который может выполнять те же функции, что и стек;2. если вы хотите использовать стек, используйте std :: stack, который может превзойти вашу собственную реализацию;3. основываясь на ваших требованиях, вы должны определить предиктор, используя алгоритм std :: count_if или std :: find_if, который сделает ваш код более компактным и красивым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...