ricerca di una parola..

Discuti dei problemi relativi alla programmazione nel tuo linguaggio preferito!

Moderatori: cb_123, thrantir, tonertemplum

Messaggiodi thrantir il 09 giu 2006, 23:29

anjua?

sotto linux uso g++, sotto windows puoi usare il mingw, il portitng del gcc, se tiscarichi dev-cpp ti trovi tutto
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

 

Messaggiodi `knives` il 10 giu 2006, 01:09

si è con quello che ho finito di compilare il programma con visual c++ mi dava problemi per la libreria del getline()
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi thrantir il 11 giu 2006, 20:55

cioè non trovava la funzione getline()?
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Messaggiodi `knives` il 11 giu 2006, 21:06

esatto.
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi `knives` il 12 giu 2006, 12:31

class string e medoto at.. da quanto sto leggendo serve per scorrere una stringa, ho capito bene?
a me serve leggere le lettere di ogni parola trovata nella aListFinal e assegnare ad ogni lettera il punteggio che vale per poi sommare i valori di ogni lettera per trovare il valore della parola.. quindi pensavo di leggere ogni lettera di una parola della lista e cosi via... fino al completamento della lista...

in soldoni.. come scorro i vari caratteri di una stringa in c++?
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi `knives` il 12 giu 2006, 13:00

Codice: Seleziona tutto
struct TypeListPoint{
       std::string aWord;
       int aPointValue;       
       };


Codice: Seleziona tutto
//calcola quanto vale ogni parola e crea una lista con solo le parole che valgono di più
void findPoint (std::list<std::string>& aListFoundWord,std::list<TypeListPoint>& aListFoundPoint )
{
     char nyCaracter;
     std::list<std::string>::const_iterator myIter;
     for(myIter = aListFoundWord.begin(); myIter != aListFoundWord.end(); ++myIter)
     {
                aListFoundPoint->aWord->push_back(*myIter);
                aListFoundPoint->aPointValue=0;
                for(i=0;myIter->length();i++)
                {
                      myCaracter=getc(myIter,i);
                      switch(myCaracter)
                      {
                                        case 'a':  aListFoundPoint->aPointValue++;break;
......
                                        case 'z':  aListFoundPoint->aPointValue=aListFoundPoint->aPointValue+4;break;               
                }     
     }
         
     
}


in c++ comè la sinstassi per indicare i vari campi della struct?

Codice: Seleziona tutto
aListFoundPoint->aWord->push_back(*myIter);


Codice: Seleziona tutto
aListFoundPoint.aWord->push_back(*myIter);


Codice: Seleziona tutto
aListFoundPoint.aWord.push_back(*myIter);


Codice: Seleziona tutto
aListFoundPoint->aWord.push_back(*myIter);
Ultima modifica di `knives` su 12 giu 2006, 16:54, modificato 1 volte in totale.
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi thrantir il 12 giu 2006, 15:18

in c++ si usa esattamente la stessa regola del c: se hai un puntatore utilizzi '->', mentre se hai un valore utilizzi '.'
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Messaggiodi `knives` il 12 giu 2006, 16:51

non ci riesco.. mi manca qualcosa e non riesco a capire cosa.
allora
io ho dichiarato la struct, penso che sia come per il C, il problema viene quando voglio accedere alla lista del tipo struct che ho dichiarato..

in qualunque modo io faccio mi da errori.. una volta dicendo che non è un membro della struct e cose cosi...
Codice: Seleziona tutto
struct TypeListScore{
       std::string aWord;
       int aScoreValue;
       void set(std::string,int); 
       };

Codice: Seleziona tutto
std::list<TypeListPoint>::const_iterator myIterScore;
myIterScore=aListFoundScore.begin();
myIterScore.push_back(*myIter)->aWord;
myIterScore->aScoreValue=0; // questo qui credo sia banale no? eppure non mi va.




e questa è tutta la procedura
Codice: Seleziona tutto
//calcola quanto vale ogni parola e crea una lista con solo le parole che valgono di più
void findPoint (std::list<std::string>& aListFoundWord, std::list<TypeListPoint>& aListFoundPoint )
{
     int mySignPoint=0;
     char myChar;
     std::list<std::string>::const_iterator myIterWord;
     std::list<TypeListPoint>::const_iterator myIterScore;
     myIterScore=aListFoundScore.begin();
     for(myIterWord = aListFoundWord.begin(); myIterWord != aListFoundWord.end(); ++myIterWord)
     {       
                aListFoundScore.aWord.push_back(*myIterWord);
                for(int i=0; i!=myIterWord->length();i++)
                {
                      std::cout<<myIterWord;
                      switch(myChar)
                      {
                                        case 'a':  mySignPoint++;break;
                                        case 'b':  mySignPoint+=4;break;
                                        case 'c':  mySignPoint+=3;break;
                                        case 'd':  mySignPoint+=3;break;
                                        case 'e':  mySignPoint++;break;
                                        case 'f':  mySignPoint+=4;break;
                                        case 'g':  mySignPoint+=3;break;
                                        case 'h':  mySignPoint+=4;break;
                                        case 'i':  mySignPoint++;break;
                                        case 'j':  mySignPoint+=4;break;
                                        case 'k':  mySignPoint+=4;break;
                                        case 'l':  mySignPoint+=3;break;
                                        case 'm':  mySignPoint+=3;break;
                                        case 'n':  mySignPoint+=2;break;
                                        case 'o':  mySignPoint+=2;break;
                                        case 'p':  mySignPoint+=3;break;
                                        case 'q':  mySignPoint=+4;break;
                                        case 'r':  mySignPoint=+2;break;
                                        case 's':  mySignPoint=+2;break;
                                        case 't':  mySignPoint=+2;break;
                                        case 'u':  mySignPoint=+4;break;
                                        case 'v':  mySignPoint=+3;break;
                                        case 'w':  mySignPoint=+4;break;
                                        case 'x':  mySignPoint=+4;break;
                                        case 'y':  mySignPoint=+4;break;
                                        case 'z':  mySignPoint=+4;break;               
                                        }
                //myIterPoint->set(,mySingPoint));     
                }
   }
}
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi thrantir il 12 giu 2006, 17:09

`knives` ha scritto:
Codice: Seleziona tutto
struct TypeListScore{
       std::string aWord;
       int aScoreValue;
       void set(std::string,int); 
       };




visto che stai dichiarando anche una funzione dentro la struct, sarebbe meglio che dichiarassi una classe, magari lo vediamo in seguito

`knives` ha scritto:
Codice: Seleziona tutto
std::list<TypeListPoint>::const_iterator myIterScore;
myIterScore=aListFoundScore.begin();
myIterScore.push_back(*myIter)->aWord;
myIterScore->aScoreValue=0; // questo qui credo sia banale no? eppure non mi va.



mi sa che qui c'e' un po di confusione, e' meglio che mi descrivi a parole quello che vuoi fare. Credo di avere intuito, ma e' meglio chiarirci sulle specifiche :wink:
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Messaggiodi `knives` il 12 giu 2006, 17:38

lo scopo di questa funzione sarebbe quella di

leggere ogni parola all'interno della lista dei termini (quella dei termini della lungheza e contenenti la striga cercata )
e di questa parola calcolarne il punteggio sommando il valore attribuito ad ogni lettera dell' alfabeto.

per fare questo cosa bisogna fare?

Codice: Seleziona tutto
1) scandire la lista in ingresso e salvarsi un termine alla volta
2) per ogni lettera del termine letto sommare il punteggio
3) salvare il termine e il punteggio ottenuto in una nuova lista di tipo <TypeScoreList> che contiene la parola e il suo valore.
4) passare alla successia.


ok.. i problemi sono..
PUNTO 2:i termini della prima lista sono salvati in una lista di string, con le mie conoscenze non riesco a convertire la stringa in un vettore di caratteri cosi da porter scandire una lettera alla volta e infilarla nello switch
PUNTO 3: io ho un puntatore alla mia lista di nome aListFoundScore, questo puntatore , o iteratore, è chiamato myIterScore. devo usare questo qui per scandire la lista e passare da un elemento all'altro della stessa, ma non mi trova o i membri della struct o i "comandi" (.push_back,push_foward,length come si chiamano?) che gli chiedo di eseguire.
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi thrantir il 13 giu 2006, 10:05

dopo leggo con calma i vari punti.

il punteggio alle lettere secondo quale criterio viene dato?
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Messaggiodi `knives` il 13 giu 2006, 10:35

ad ogni lettera è assegnato un valore in base alla rarita di utilizzo nella formazione delle parole in italiano. se guardi lo switch, il numero che sommo alla variabile è quel valore, dove non cè ed è solo ++ significa che vale 1. quindi per esempio la a =1, b=4,c=3,d=3... la r =2 e cosi via
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi thrantir il 13 giu 2006, 11:48

intano, potrebbe essere carino usare una map, che e' l'implementazione stl di una hashtable... segnalo che poi ne discutiamo
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Messaggiodi `knives` il 13 giu 2006, 20:05

se vogliamo discutere.. io sono pronto Immagine
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi thrantir il 14 giu 2006, 09:35

Codice: Seleziona tutto
class RatedString
{
public:

    RatedString(const std::string& aString = "",
                int aRate = 0)
        :theString(aString)
        ,theRate(aRate)
    {}

    ~RatedString(){}

    const std::string& getString()
    {
        return theString;
    }

    int getRate()
    {
        return theRate;
    }

private:

    std::string theString;
    int theRate;
};


int calculateStringValue(const std::string& aString)
{
    int myResult = 0;

    std::string myOnePoint("aei");
    std::string myTwoPoints("norst");
    std::string myThreePoints("cdglmpv");
    std::string myFourPoints("bfhjkquwxyz");

    for(unsigned int myIndex = 0;
        myIndex < aString.length();
        ++myIndex)
    {
        if(myOnePoint.find(aString[myIndex]) != aString.npos)
        {
            ++myResult;
        }
        else if(myTwoPoints.find(aString[myIndex]) != aString.npos)
        {
            myResult += 2;
        }
        else if(myThreePoints.find(aString[myIndex]) != aString.npos)
        {
            myResult += 3;
        }
        else if(myFourPoints.find(aString[myIndex]) != aString.npos)
        {
            myResult += 4;
        }
    }
    return myResult;
}

void calculateRate(const std::list<std::string>& aStringList,
                   std::list<RatedString>& aRatedStringList)
{
    std::list<std::string>::const_iterator myIter;
    for(myIter = aStringList.begin();
        myIter != aStringList.end();
        ++myIter)
    {
        int myRate = 0;
        aRatedStringList.push_back(RatedString(*myIter, calculateStringValue(*myIter)));
    }
}
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

 
PrecedenteProssimo

Torna a Programmare

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite