Classe stringa

di il
1 risposte

Classe stringa

Salve a tutti. Perchè quando eseguo questo programma la finestra di esecuzione del dos si apre e chiude istantaneamente. Dov'è il problema? Si tratta di una semplice classe stringa!

#include <iostream>
#include <cstdlib>
#include <cstring>

using namespace std;

class Stringa
{
      private:
              char *ch; // puntatore alla stringa
              int lunghezza; // lunghezza della stringa
      public:
              Stringa() : ch(0), lunghezza(0) {}
              Stringa (const char *st) { ch = new char[strlen(st)+1]; strcpy(ch,st); }
              Stringa (const Stringa& s);
              ~Stringa();
              Stringa& operator = (const Stringa& s);
              Stringa& concat (const Stringa& s);
              void stampa() const { cout << ch << endl; }
};

Stringa :: Stringa (const Stringa& s)
{
            lunghezza = s.lunghezza;
            ch = new char [strlen(s.ch)+1];
            strcpy(ch,s.ch);
}

Stringa :: ~Stringa() { delete [] ch; }

Stringa& Stringa :: operator = (const Stringa& s)
{
            lunghezza = s.lunghezza;
            delete [] ch;
            ch = new char [strlen(s.ch)+1];
            strcpy(ch,s.ch);
            return *this;
}

Stringa& Stringa :: concat (const Stringa& s)
{
            lunghezza = lunghezza + s.lunghezza;
            char *temp = new char [lunghezza + 1];
            strcpy(temp,ch);
            strcat(temp,s.ch);
            delete [] ch;
            ch = temp;
            return *this;
}

int main ()
{
       Stringa a ("Salve");
       Stringa b ("Mondo");
       a.stampa();
       b.stampa();
       a.concat(b);
       a.stampa();
       
       cout << endl << endl;
       system ("PAUSE");
       return 0;
}      

1 Risposte

  • Re: Classe stringa

    Che ne dici di questa:
    
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    
    class Stringa
    {
    private:
    	char *ch; // puntatore alla stringa
    	int lunghezza; // lunghezza della stringa
    public:
    	Stringa() : ch(0), lunghezza(0) {}
    	Stringa (const char *st): lunghezza(strlen(st)) { ch = new char[lunghezza + 1]; strcpy(ch,st); }
    	Stringa (const Stringa& s);
    	~Stringa();
    	Stringa& operator = (const Stringa& s);
    	Stringa& concat (const Stringa& s);
    	void stampa() const { cout << ch << endl; }
    };
    
    Stringa :: Stringa (const Stringa& s)
    {
    	lunghezza = s.lunghezza;
    	ch = new char [strlen(s.ch)+1];
    	strcpy(ch,s.ch);
    }
    
    Stringa :: ~Stringa() { delete [] ch; }
    
    Stringa& Stringa :: operator = (const Stringa& s)
    {
    	lunghezza = s.lunghezza;
    	delete [] ch;
    	ch = new char [strlen(s.ch)+1];
    	strcpy(ch,s.ch);
    	return *this;
    }
    
    Stringa& Stringa :: concat (const Stringa& s)
    {
    	lunghezza = lunghezza + s.lunghezza;
    	char *temp = new char [lunghezza + 1];
    	strcpy(temp,ch);
    	strcat(temp,s.ch);
    	delete [] ch;
    	ch = temp;
    	return *this;
    }
    
    int main ()
    {
    	Stringa a ("Salve");
    	Stringa b ("Mondo");
    	a.stampa();
    	b.stampa();
    	a.concat(b);
    	a.stampa();
    
    	cout << endl << endl;
    	system ("PAUSE");
    	return 0;
    } 
    
    Mai dimenticarsi di inizializzare le variabili.
Devi accedere o registrarti per scrivere nel forum
1 risposte