Se ho ben capito vorresti fare un semplice parser...mica banale.
Posto un esempio molto limitato e senz'altro migliorabile, giusto per dare una vaga idea.
Codice:
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
typedef vector<string>::iterator index;
bool parserizza(string &comandi)
{
static bool inizializzato = false;
static vector<string> eliminare;
static vector<string> azioni;
bool esci = false;
if (!inizializzato) {
eliminare.push_back(" il ");
eliminare.push_back(" lo ");
eliminare.push_back(" la ");
azioni.push_back("leggi");
azioni.push_back("guarda");
azioni.push_back("fine");
azioni.push_back("salva");
azioni.push_back("attacca");
inizializzato = true;
}
index inizio = eliminare.begin(), fine = eliminare.end();
string::size_type corrente = 0;
for (index i = inizio; i < fine; ++i)
if ((corrente = comandi.find(*i, corrente)) != string::npos)
comandi.replace(corrente, i->length(), " ");
istringstream s(comandi);
string verbo, oggetto;
s >> verbo;
bool trovata_azione = false;
inizio = azioni.begin(); fine = azioni.end();
for (index i = inizio; i < fine; ++i) {
if ((corrente = comandi.find(*i, corrente)) != string::npos) {
trovata_azione = true;
cout << "trovata azione: \'" << (*i) << "\' ";
s >> oggetto;
if (oggetto.size())
cout << "con oggetto: \'" << oggetto << "\'.";
else
cout << "senza oggetto.";
cout << endl;
if ((*i) == "fine") {
esci = true;
break;
}
}
}
if (! trovata_azione)
cout << "Verbo non presente nel vocabolario" << endl;
return esci;
}
int main(void)
{
string comandi;
cout << "Sei di fronte ad una casetta bianca. Davanti a te\n"
<< "un cane di media taglia ti guarda dubbioso. Alla\n"
<< "tua destra c'e' un cartello bianco.\n" << endl;
do {
getline(cin, comandi);
} while (!parserizza(comandi));
}
Il risultato e' qualcosa del genere:
Codice:
$ ./parser.exe
Sei di fronte ad una casetta bianca. Davanti a te
un cane di media taglia ti guarda dubbioso. Alla
tua destra c'e' un cartello bianco.
leggi il cartello
trovata azione: 'leggi' con oggetto: 'cartello'.
guarda il cane
trovata azione: 'guarda' con oggetto: 'cane'.
guarda la casetta
trovata azione: 'guarda' con oggetto: 'casetta'.
attacca il cane
trovata azione: 'attacca' con oggetto: 'cane'.
salva
trovata azione: 'salva' senza oggetto.
fine
trovata azione: 'fine' senza oggetto.