Jump to content

Nathan Vieira Marcelino

Members
  • Content count

    1
  • Joined

  • Last visited

Community Reputation

0 Comum

About Nathan Vieira Marcelino

  1. Nathan Vieira Marcelino

    Arvore binaria de palavras em C++

    Entao pessoal, sou novo no forum e preciso de ajuda com o seguinte problema: implementar uma arvore binaria de palavras em c++ (existem alguns quesitos do trabalho mas estes eu acho q posso resolver). Meu problema é colocar uma string como parametro dentro de cada Nó da arvore, tentei transformar tudo em 'const char *' mas nao obtive sucesso. segue o codigo e os erros, se alguem souber como me ajudar desde ja agradeço. #include <iostream> #include <string> #include <fstream> using namespace std; class No { public: No *esq, *dir; const char* no; int frequencia=0; No(const char* no){ this-> no = no; esq = NULL; dir = NULL; } ////////////////////////////////////////////////////////////////// int getNo(int i){ return no[i]; } ////////////////////////////////////////////////////////////////// No* getEsq(){ return esq; } ////////////////////////////////////////////////////////////////// No* getDir(){ return dir; } ////////////////////////////////////////////////////////////////// void setEsq(No* word){ esq = word; } ////////////////////////////////////////////////////////////////// void setDir(No* word){ dir = word; } ////////////////////////////////////////////////////////////////// /* void setFrequencia(){ frequencia+=frequencia; } ////////////////////////////////////////////////////////////////// int getFreq(){ return frequencia; } */ ////////////////////////////////////////////////////////////////// }; class Arvore { private: No* raiz; public: arvore(){ raiz = NULL; } ////////////////////////////////////////////////////////////////// void inserir (const char * word) { if(raiz == NULL) raiz = new No (word); // INSERIR COM ARVORE VAZIA else inserir2(raiz,word); } ////////////////////////////////////////////////////////////////// void inserir2 (No* no, const char* word) { int i=0, end = 1; while(end==1 || i>word.strlen() || i > no-> no.strlen()) { if ((int)word[i] < no->getNo(i)) { if(no->getEsq()==NULL) { No* novo_no = new No(word); no->setEsq(novo_no); }else{ inserir2(no->getEsq(),word); } end=0; // INSERIR A DIREITA OU A ESQUERDA }else if((int)word[i] > no->getNo(i)) { if(no->getDir()==NULL) { No* novo_no = new No(word); no->setDir(novo_no); }else{ inserir2(no->getDir(),word); } end=0; } i++; } /* SE FOR IGUAL SOMA A FREQUENCIA DA PALAVRA */ // setFrequencia(); /* SE FOR IGUAL SOMA A FREQUENCIA DA PALAVRA */ } }; bool escrever (){ ////////////////////////////////////////////////////////////////// string texto; ofstream myfile ("original.txt"); if(myfile.is_open()){ getline(cin,texto); myfile << texto; // ESCREVER TEXTO // myfile.close(); return 0; }else{ return 1; } ////////////////////////////////////////////////////////////////// } ///////////////////////////////////////////////////////////////// bool modificar(){ string texto; fstream arq("original.txt"); ofstream myfile("modificado.txt"); if((arq.is_open()) && (myfile.is_open())){ getline(arq, texto); for (int i = 0; i < texto.length(); ++i) { if (((texto[i]<65)||(texto[i]>122)) || ((texto[i]>90)&&(texto[i]<97))) { texto[i]='\n'; } if((texto[i]>64)&&(texto[i]<91)) { texto[i]+=32; } } cout<< texto <<endl; myfile<< texto; arq.close(); myfile.close(); return 0; }else{ return 1; } } ///////////////////////////////////////////////////////////////// int main() { string palavra; Arvore arv; cout<<escrever()<<endl; cout<<modificar()<<endl; fstream arquivo ("modificado.txt"); const char* temp= getline(arquivo,palavra).c_str() arv.inserir( temp ); /*for (int i = 0; i < 7; ++i) { arv.inserir (getline(arquivo,palavra)); endl; }*/ return 0; } ////////////////////////////////////////////////////////////////// Erros: main.cpp: In member function 'void Arvore::inserir2(No*, const char*)': main.cpp:71:25: error: request for member 'strlen' in 'word', which is of non-class type 'const char*' while(end==1 || i>word.strlen() || i > no-> no.strlen()) ^~~~~~ main.cpp:71:49: error: request for member 'strlen' in 'no->No::no', which is of non-class type 'const char*' while(end==1 || i>word.strlen() || i > no-> no.strlen()) ^~~~~~ main.cpp: In function 'int main()': main.cpp:158:45: error: 'class std::basic_istream<char>' has no member named 'c_str' const char* temp= getline(arquivo,palavra).c_str() ^~~~~
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.