1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

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

Discussão em 'Programação' iniciada por kropok, 18 de Julho de 2008. (Respostas: 6; Visualizações: 2866)

  1. 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: 18 de Julho de 2008
  2. 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?
     
  3. 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: 18 de Julho de 2008
  4. o teu problema é não saberes gravar para ficheiros?
     
  5. 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?
     
  6. 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: 19 de Julho de 2008
  7. 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?
     

Partilhar esta Página