Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] Pila di caratteri ma Output in ASCII

    Ho implementato una pila di caratteri con le relative funzioni di push() e pop(), isEmpty() e stampa(), utilizzando il concetto di classe e di lista linkata. Non riesco però ad individuare dove si trovi l'errore che non mi permette di visualizzare il carattere inserito, invece ottengo come Output il suo corrispettivo codice ASCII.
    Qualcuno sarebbe così gentile da aiutarmi ad individuarlo?
    Ecco riportato il codice:

    codice:
    #include <iostream.h>
    
    class BOX {
      private:
        char carattere;
        BOX *next;
    
      public:
        BOX();
        void set_carattere(char nuovo_carattere);
        int get_carattere();
        BOX *get_next();
        void collegaBox(BOX *nextBox);
    };
    
    class LISTA {
      public:
        BOX *start;
        BOX *last;
        BOX *box;
    
        LISTA();
        void push();
        void pop();
        void top();
        bool isEmpty();
        void stampa();
    };
    
    
    // Metodi della classe BOX
    BOX::BOX()
    {
       next = NULL;
    }
    
    void BOX::set_carattere(char nuovo_carattere)
    {
       carattere = nuovo_carattere;
    }
    
    int BOX::get_carattere()
    {
       return carattere;
    }
    
    BOX *BOX::get_next()
    {
       return next;
    }
    
    void BOX::collegaBox(BOX *nextBox)
    {
       next = nextBox;
    }
    
    
    // Metodi della classe LISTA
    LISTA::LISTA()
    {
       start = NULL;
       last = NULL;
       box = NULL;
    }
    
    void LISTA::push()
    {
       char lettera;
    
       cout << "Inserire il carattere da immettere nella pila : ";
       cin >> lettera;
    
       box = new BOX;
       box->set_carattere(lettera);
    
       if (start == NULL)
       {
          start = box;
          last = box;
       }
          else {
                  last->collegaBox(box);
                  last = box;
          }
    }
    
    void LISTA::pop()
    {
       BOX *temp;
       BOX *temp1;
    
       if (start == NULL)
         cout << "La pila e' vuota!\n";
         else if (start == last) {
           temp = start;
           cout << "Il carattere eliminato e' : " << temp->get_carattere() << "\n";
           delete temp;
           start = NULL;
           last = NULL;
         } else {
                   temp = start->get_next();
                   temp1 = start;
                   while (temp->get_next() != NULL) {
                     temp = temp->get_next();
                     temp1 = temp1->get_next();
                   }
                      cout << "Il carattere eliminato e' il seguente : " << temp->get_carattere() << "\n";
                      delete temp;
                      last = temp1;
                      temp1->collegaBox(NULL);
           }
    }
    
    void LISTA::top()
    {
       if (start == NULL)
         cout << "La pila e' vuota!\n";
         else
           cout << "L'ultimo carattere della pila e' : " << last->get_carattere() << "\n";
    }
    
    bool LISTA::isEmpty()
    {
       if (start == NULL)
         cout << "La pila e' vuota!\n";
         else
           cout << "Sono presenti degli elementi all'interno della pila!\n";
    }
    
    void LISTA::stampa()
    {
       BOX *temp;
    
       temp = start;
       if (start == NULL)
         cout << "La pila e' vuota!\n";
         else {
                 cout << "Gli elementi della pila sono : \n";
                 while (temp->get_next() != NULL) {
                   cout << temp->get_carattere();
                   if (temp != last)
                     cout << " \n";
                     temp = temp->get_next();
                 }
                    cout << last->get_carattere() << "\n";
         }
    }
    
    
    main()
    {
       LISTA pila;
       int choice = 0;
    
       do {
             cout << "-------------------------------------------\n";
             cout << "            PILA (DI CARATTERI)            \n";
             cout << "-------------------------------------------\n";
             cout << "Digitare 1 Push; 2 Pop; 3 Top; 4 isEmpty; 5 Stampa; 99 per uscire dal programma.\n";
             cout << "Effettuare una scelta : ";
             cin >> choice;
    
             switch (choice) {
               case 1 :
                 pila.push();
                 break;
    
               case 2 :
                 pila.pop();
                 break;
    
               case 3 :
                 pila.top();
                 break;
    
               case 4 :
                 pila.isEmpty();
                 break;
    
               case 5 :
                 pila.stampa();
                 break;
    
               case 99 :
                 cout << "Exiting program !\n\n";
                 break;
    
               default :
                 cout << "Sorry! Bad menu selection!\n\n";
                 break;
             }
          } while (choice != 99);
    }

  2. #2
    Utente di HTML.it L'avatar di r1cky`
    Registrato dal
    Feb 2007
    Messaggi
    432
    Premettendo che non so una cippa di c++ (avendo studiato solo il c)

    codice:
    int BOX::get_carattere()
    {
       return carattere;
    }
    Non dovrebbe ritornare un char? Se il c++ lavora come il c, facendo ritornare un int tu lo stai castando implicitamente ed è normale che ti ritrovi il valore decimale corrispettivo al carattere.

    Se ho detto una cagata, chiedo venia.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Io non so una ceppa di C++ ma nemmeno di C, però in compenso ti do ragione, dev'essere quello. Sfortunatamente ora come ora non posso testarlo, però in C++ quello fa un cast implicito a int e quindi lo stampa come numero.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  4. #4

    Risolto! :)

    Grazie, cari ragazzi.. Ora è tutto risolto! Il consiglio di r1cky` è giustissimo, perchè se la funzione deve restituire una variabile di tipo char, dev'essere essa stessa di tipo char, e non di tipo int. La situazione non cambia se usiamo il C.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.