[C++] array based stack

di il
5 risposte

[C++] array based stack

Ciao a tutti,
sto implementando per scuola uno stack basato su un array (std::string data[StackMax]).
Ecco qui l'header

const int StackMax=10;
#include <string>
#include "exceptions.h"



class Stack_ab
{
    std::string data[StackMax];
    int index;
public:
    Stack_ab();
    ~Stack_ab();
    int size();
    void push(std::string value);
    std::string pop();
    std::string top();
    bool empty();
    
};
Il problema é nel push..

void Stack_ab::push(std::string value)	//add to stack
{
	try
	{
		index++;

		int tmp = value.length();
		for(int i=0; i < tmp; i++)
		{
			data[index].push_back(value.at(i));
		}
	}

	catch(OverFlow e)
	{
		e.overflowoutput();
	}
		
}
Come mai non funziona ?
Non riesco a capire come assegnare a "data[index]" il valore "value".
Questo array é di tipo std::string, come mai non mi accetta la variabile "std::string value" ?
Ho provato a passargliela carattere dopo carattere perché a quanto pare posso fare solo così..
Spero qualcuno mi possa essere d'aiuto!

Grazie mille

5 Risposte

  • Re: [C++] array based stack

    
    data[index] = value;
    
  • Re: [C++] array based stack

    Non va.. mi restituisce questo errore:

    Unhandled exception at 0x588bcbdc (msvcr100d.dll) in Array Based Stack.exe: 0xC0000005: Access violation reading location 0x012597a2.

    e mi riporta al file memcpy.asm a queste righe:

    LeadDown3:
    mov al,[esi+3] ;U - load first byte
    and edx,ecx ;V - trailing byte count

    esattamente quando inserisco l'ultima stringa
    
    int main (int argc, const char * argv[])
    {
    
        Stack_ab mystack;
        std::string temp;
        std::cout<<"initial size of stack: "<<mystack.size()<<"\n";
        try {
            mystack.push("Villa");
            mystack.push("Messi");
            mystack.push("Alexis");
            mystack.push("Iniesta");
            mystack.push("Xavi");
            mystack.push("Mascherano");
            mystack.push("Dani Alves");
            mystack.push("Abidal");
            mystack.push("Pique");
            mystack.push("Puyol");
            mystack.push("Valdes");         //quando prova a eseguire questo metodo mi da l'errore
    
        } catch (OverFlow& e) {
            e.overflowoutput();
        }
            
        std::cout<<"current size of stack: "<<mystack.size()<<"\n";
    
        std::cout<<"current top element is: "<<mystack.top()<<"\n";
        
        try {
            while (!mystack.empty()) {
                std::cout<<mystack.pop()<<" wurde gepopt\n";
                std::cout<<mystack.top()<<" is now on top\n";
                //in the console these sentences are funny =)
            }
        } catch (UnderFlow& e) {
            e.underflowoutput();  
        }
        
    	delete &mystack;
    
        int i;
    	std::cin >> i;
    
        return 0;
    }
    
  • Re: [C++] array based stack

    Sembra quasi funzionare solo con i singoli caratteri.. eppure é di tipo std::string e non char !! se salvo solo un carattere funziona.. :/ :/
  • Re: [C++] array based stack

    
    const int StackMax=10;
    
    stai inserendo 11 elementi e lo stack è di 10.
    
    void Stack_ab::push(std::string value)   //add to stack
    {
       if(++index < StackMax)   
             data[index] = value;
       else
       {
           --index;
           throw("Data Overflow");
       }
    }
    
  • Re: [C++] array based stack

    Maledizione!! thx mille
Devi accedere o registrarti per scrivere nel forum
5 risposte