Duvida em como criar um historico em c++ com listas ligadas

kropok

Membro
Boa Noite.

Fiz um programa em que faz uma pesquisa de um texto para ver se existe a palavra, e em que linha se encontra e mais uns extras. No entanto também queria fazer um historico das palavras pesquisadas e registar o numero de vez que a palavra foi pesquisada.
O programa le o texto sem problemas, mas não estou a conseguir adicionar a palavra pesquisada no historico.
Ah... estou a fazer isto com listas ligadas em c++
Será que me podem ajudar?

tenho a seguinte class defenida:

Código:
 public:
    int numero_elementos;    //nr de palavras que a lista tem

    CClass();
    ~CClass();

    void LerFicheiro();
    void InserePalavraOrdenada(char [], int, int ,int);        //insere palavra ordenada alfabeticamente
    void EscreveLista();                                              //escreve a lista na linha comandos
    void EscreveFicheiro();                                    //escreve lista num ficheiro .txt (por exemplo)
    int VerExistePalavra(char []);                         //devolve -1 se nao existir e devolve 0 se existir
    void PalavraRepetica(CNoLista *, CNoDados *);         //conta o numero de repetiçoes no texto
    void PesquisaPalavra(void);                                //pesquisa a palavra no texto
    void LePalavra(CNoLista *, CNoDados *);             //escreve uma palavra na linha de comandos
};
#endif
 
Última edição pelo moderador:
Só vendo os cabeçalhos das funções não é fácil saber porque não está a adicionar a palavra ao histórico.
Já agora usas char [] não podes usar strings?
 
A função que procura a palavra no texto e a seguinte:

Código:
void CClass:: PesquisaPalavra(void)
{
    CNoLista *Actual;                            //Ponteiro para o Nó Actual
    Actual = Cabeca;
//    int again = 1;
    char palavra[20];
//    do
//    {
        if(Cabeca == NULL)
            cout << "Lista vazia.." << endl;
        else
        {
            cout << "Que palavra pretende pesquisar? " << endl;
//            cout << "(Se quiser nao deseja pesquisar mais nenhuma palavra escreva [exit])" << endl;
            cin.getline(palavra, 20);
        
        //procurar no texto seleccionado

//            if(strcmp(palavra, "exit") != 0)
//            {
                while(Actual != NULL)
                {
                    if(strcmp(Actual->Palavra, palavra) == 0)
                    {    
                        LePalavra(Actual, Actual->NoDados); //LePalavra é uma função que escreve na linha comandos
                        goto end;
                    }
                    else
                        Actual = Actual->Proximo;
                }
                end:
                if(Actual == NULL)
                    cout << "A palavra " << palavra << " nao se encontra na lista." << endl;

            //}
        }
//    }while(strcmp(palavra, "exit") == 0);
}
a partir daqui estou com um problema, esta função vai pesquisar a palavra a partir de um ficheito .txt já aberto (onde se encontra o texto) e eu quero guardar esta palavra num outro ficheiro .txt.
 
Última edição pelo moderador:
Sim, pode-se dizer que sim.
E o que também não entendo é que no momento em que tou a pesquisar a palavra no ficheiro .txt (onde se encontra o texto) como é que vou guardar essa palavra no historico.
O meu pensamento é o seguinte... eu vou ler primeiro o texto para pesquisar se existe a palavra (que ja consegui fazer) mas depois quero adicionar a palavra ao historico se não existir no proprio, caso contrario adiciono um "contador" para saber o numero de vezes que pesquisei aquela palavra.

Resumindo... basicamente não sei guardar num ficheiro lol

Será que me podes ajudar?
 
Para trabalhar com ficheiros é muito simples:
Código:
 #include <iostream.h>
  #include <fstream.h>  // necessario para trabalhar com ficheiros
  
  // Este programaefectua a cópia do ficheiro entradas
  // para o ficheiro saidas
  int main()
  {
   ifstream FEnt("entradas"); //declarar ficheiro de entrada FEnt
    if (!FEnt)
    {
    cout << "Erroaoabrirficheiroentradas";
     return 1;
    }
  ofstream  FSai; //declarar ficheiro de saida FSai
  FSai.open("saidas", ios::out | ios::noreplace, 0 | 2);  //abre o ficheiro de saida
    if (!FSai)
    {
     cout << "Erroaoabrirficheirosaidas";
      return 1;
    }
    char C;
    while(!FEnt.eof()) //enquanto o ficheiro de entrada nao chegar ao fim
    {
     FEnt >> C;  //le um caracter do ficheiro de entrada para a variavel C
     FSai << C; //escreve a variavel C no ficheiro de saida
    }
  FEnt.close(); //fecha os ficheiros
  FSai.close();
  }
Acho que o caodigo da para perceber bem, mas resumindo um ficheiro de entrada é do tipo ifstream, um de saida do tipo ofstream para escrever ou ler dos ficheiros é como usar cin ou cout
para mais info cplusplus.com
agora acerca da tua duvida para gravar as palavras e o numero de vezes que ja foram pesquisadas podes criar uma struct com um campo int e um string para guardares o nro de vezes que a palavra foi ppesquisada e a palavra em causa e depois guardas a struct numa lista
 
Última edição pelo moderador:
Obrigado pela ajuda. Afinal é facil trabalhar com ficheiros.

Mas agora tenho um problema com o programa. Eu meto a ler o ficheiro principal e guarda numa lista, depois pesquiso a palavra na lista e guarda a mesma palavra no ficheiro historico. Mas quando eu meto para amostrar o historico (atraves da lista) aparece as duas listas juntas, do texto principal e do historico.
Há alguma maneira de separar as duas listas?
 
Back
Topo