0

しかし、両端キューに文字を入れる .h ファイルのループは、私が予想したとおりに機能しているようです。ABottom に関する提案、またはポップが機能しない理由はありますか?

ファイル 1:

// Kevin Shaffer TwoStackKAS.h

#include<iostream> 
#include<string>
#include<vector>

#ifndef TWOSTACKKAS_H_
#define TWOSTACKKAS_H_

using namespace std;

class TwoStacks {
    char elements[];
    int Abottom, Bbottom;
    int AtopSpace, BtopSpace;
    int totalSize;

public:
    TwoStacks(int maxAdds) {
        totalSize = 2*maxAdds +1;
        char elements[totalSize]; 
        const int Bbottom = totalSize-1; //bottom for both stacks!
        const int Abottom = 0;
        AtopSpace= 0; 
        BtopSpace = totalSize-1; //top for both stacks! 
        cout<<"Stack Size: "<<totalSize<<endl;
    }


    virtual bool empty() const { 
        return Abottom == AtopSpace && Bbottom==BtopSpace;
    }

    virtual bool full() const { return AtopSpace==BtopSpace;}
    virtual int stackSize() {
        cout<<Abottom<<" Abottom"<<endl;
        return (AtopSpace - Abottom +Bbottom -BtopSpace);
    }

    virtual char popA() {
        if (empty()){    
            cerr << "Attempting to pop Empty stack!"<< endl;
            return ' ';    //prepare EmptyQexceptiin    
        } else {
            cout << elements[--AtopSpace] << " testpopA"<< endl;
            return elements[--AtopSpace];
        }
    }

    virtual char popB() {    
        if (empty()){    //later EmptyQException
            cerr <<"Attempting to pop an empty stack!" << endl;
            return ' ';        
        } else {
            //cout <<elements->at(++BtopSpace) << endl;
            cout << elements[++BtopSpace] << " test"<< endl;
            return elements[++BtopSpace];

        }
    }

     virtual void pushB(char newItem){    
        elements[BtopSpace--] = newItem;
    }

     virtual void pushA(char newItem){    
        elements[AtopSpace++] = newItem;
    }

    virtual string toString() const {
        string out = "";
        for (int i = 0 ; i<=Bbottom; i++) {
            out += elements[i];}
        return out;
    }
};  

#endif

そしてファイル 2:

/** Kevin Shaffer
 * Given an input string, reverse each half of the string; 
 * pivot on the middle element if it exists.
 * uses double ended stack in twoStackKAS.h*/


#include<string>
#include "TwoStackKAS.h"
#include<iostream>
#include<string>

using namespace std;
int main (int argc, char* argv[]){
    if (argc<=1){return 0;}
    string word = argv[1];
    int length = word.size();                   // gets length of word
    int half = length/2;
    TwoStacks* sd = new TwoStacks(length/2);
    //cout<<sd->stackSize()<<endl;
    for(int i = 0; i < length/2; i++){  
        sd->pushA(word[i]);
        cout << word[i] << endl;
    }

    for(int i = length; i >= length/2; i--){   //Second half of word
        sd->pushB(word[i] );     //has been pushed 
        cout << word[i] << endl; //in reverse order. 
    } 
    //cout << word << endl;

    //Recombine word 
    if(length%2==1){ word = word[length/2];}
    else{ word = "";}
    cout<<sd->stackSize()<<endl;
    string leftHalf; string rightHalf;
    string myWord; //new word (shuffled)
    for(int i=0; i< half; i++) {
        leftHalf +=  sd->popA();
        rightHalf += sd->popB();
    }
    //cout<<"Stack: "<<sd->toString()<<endl;
    cout << rightHalf << endl;
    cout << leftHalf << endl;
    myWord = leftHalf + word + rightHalf;
    cout<<myWord<<endl;
    return 0;
}   
4

1 に答える 1