2017-11-03 1 views
0

Ich versuche, meinen Stapel basierend auf der Anzahl der Buchstaben, die ein Benutzer eingibt, dynamisch zuzuweisen.Stapelgröße von Benutzer

Mein aktuelles Programm bekommt eine Reihe von Buchstaben oder Zahlen und gibt sie dann in FILO-Reihenfolge aus (also umgekehrte Reihenfolge).

Zum Beispiel, wenn ein Benutzer 123 eingibt, setzt er die Größe des Stapels 3 und kehrt 321.

Das ist mein Header (Klasse)

class CharStack { 
    enum {size = 100};  //size of stack. big enough to receive long letters. 
    int top;    //top pointer 
    char buf[size];   //stack's size 

    public: 

    CharStack()    //constructor 
     {top = size;} 

    bool chkEmpty() const //true if no data in stack 
     {return top == size;} 
    bool chkFull() const //true if stack is full 
     {return !top;} 
    bool push(char ch);  //pop data from stack 
    char pop(); 
}; 

und das ist mein Haupt.

int main() { 
    CharStack chStack;    //A stack with 100 
    char str[100]; 
    int *size; 

    cout << "input letter or numbers:"; 
    cin >> str; 
    size = new int[strlen(str)+1]; //count number of letters. 

und so weiter ...

denke ich, alles was ich brauche von hier zu tun ist, size (in main) = buf[size] (in der Header-Datei) zu setzen. Ich glaube, es gibt einen sehr einfachen Weg, dies zu lösen, aber ich sehe es einfach nicht.

+0

FIFO bedeutet, dass Elemente in derselben Reihenfolge ausgegeben werden, in der sie eingegeben wurden, nicht umgekehrt. In jedem Fall, um Ihre Frage zu beantworten, ist "Größe" ein 'privates' Mitglied von' CharStack', daher ist 'main()' in Ihrem Code nicht zugänglich. Wenn Sie auf den Wert von etwas zugreifen müssen, das privat ist, deklarieren Sie eine "public" -Memberfunktion der Klasse, die sie zurückgibt. – Peter

+0

FIFO: zuerst in first out, taht nicht zurück. –

+1

Sie kennen std :: stack? –

Antwort

1

Sie können std::stack<char> verwenden, die das tut, was Sie brauchen.

Wenn Sie jedoch müssen oder es selbst tun möchten, sollten Sie buf ein Zeiger machen verkohlen und zuweisen und ausplanen Speicher als mit new[] und delete[] benötigt. Ähnlich wie in Ihrem Code mit size. Using std::vector<char> ist eine Zwischenlösung.

Sie können die Größe an Ihre Klasse über den Konstruktor oder eine setSize() Funktion übergeben.

Verwandte Themen