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()
^~~~~Discussão (1)
Carregando comentários...