Salve, vi scrivo riguardo ad un problema che ho avuto con un esercizio che metto qui di seguito:
Si implementi una classe Pila, attraverso l'utilizzo dei template, contenente elementi di tipo generico H. La classe dovrà implementare la procedura push, la procedura pop, e la procedura di stampa degli elementi in essa contenuti. La stampa dovrà essere effettuata procedendo dalla testa della Pila fino all'elemento che si trova in base ad essa.
L’input è suddiviso in 100 task, uno per ogni riga. Ogni riga del file di input è formata da 2+N elementi. Il primo elemento è una stringa che identifica il tipo di dato (H) che dovrà essere contenuto all'interno della Pila. Il secondo elemento è un valore intero N, il quale rappresenta l'insieme delle operazioni che dovranno essere eseguite nella struttura dati (push e pop). Seguono N elementi che rappresentano, nell'ordine dato, le operazioni che dovranno essere eseguite all'interno della Pila. Un'operazione di inserimento (push) di un elemento, "v", di tipo H è rappresentata dal carattere "i" concatenato con il valore di "v". Un'operazione di cancellazione (pop) è invece rappresentata dalla stringa "pop".
Task di esempio:
input.txt:
bool 10 i1 i0 pop pop i1 i0 i0 i1 i1 i0
char 10 ij ir pop it iq ir im ik it it
int 10 i13 i17 i6 pop i15 i2 i9 pop pop i5
output.txt
0 1 1 0 0 1
t t k m r q t j
5 15 17 13
Vi posto il mio codice:
#include <iostream>
#include <fstream>
#define MAX 200
#define INPUT_FILE "input.txt"
#define OUTPUT_FILE "output.txt"
using namespace std;
fstream infile, outfile;
template <class H>
class Pila {
private:
int testa;
H vett[MAX];
public:
Pila() {
testa = 0;
}
void push(H val) {
vett[testa] = val;
testa++;
}
void pop(H val) {
vett[--testa];
}
void stampa() {
for (int i=testa; i>0; i--) {
outfile << vett[i] << " ";
}
outfile << endl;
}
};
int main()
{
infile.open(INPUT_FILE, fstream::in);
outfile.open(OUTPUT_FILE, fstream::out);
for (int i=0; i<100; i++)
{
string type;
int N;
infile >> type;
infile >> N;
if (type=="int")
{
Pila<int> p;
string a;
int x;
for (int i=0; i<N; i++)
{
infile >> a;
if(a=="i") {
infile >> x;
p.push(x);
}
else if (a=="pop")
{
p.pop(x);
}
}
p.stampa();
}
else if(type=="double")
{
Pila<double> p;
string a;
double x;
for (int i=0; i<N; i++)
{
infile >> a;
if(a=="i") {
infile >> x;
p.push(x);
}
else if (a=="pop")
{
p.pop(x);
}
}
p.stampa();
}
else if(type=="bool")
{
Pila<bool> p;
string a;
bool x;
for (int i=0; i<N; i++)
{
infile >> a;
if (a=="i") {
infile >> x;
p.push(x);
}
else if (a=="pop") {
p.pop(x);
}
}
p.stampa();
}
else if(type=="char")
{
Pila<char> p;
string a;
char x;
for (int i=0; i<N; i++)
{
infile >> a;
if (a=="i") {
infile >> x;
p.push(x);
}
else if (a=="pop") {
p.pop(x);
}
}
p.stampa();
}
}
infile.close();
outfile.close();
return 0;
}
Il programma compila ma in output stampa tutti 0, e credo che la causa stia nel fatto che non riesco a capire come fare per fargli capire quando inserire o estrarre un dato, cioè se creo un oggetto in cui entrano interi, come faccio a mettere una condizione che legga se c'è il carattere i o la stringa pop e di conseguenza eseguire la funzione di inserimento o estrazione dalla pila?
Spero mi possiate aiutare, grazie in anticipo!