Jump to content

Question

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()
                                             ^~~~~
 

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

você está transformando uma string num char *

Não tem como chamar métodos num tipo primitivo. Só em classe (em C++ string e char * são coisas diferentes). Leia a msg de erro do compilador.

 

Além disso, getline não retorna um objeto da classe string p/ você tentar converter usando c_str. Procure os manuais das funções e métodos na internet.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By luciano
      Boa noite pessoal alguém poderia me ajudar por favor,
      gostaria de pagar o valor da função random e colocar na imagem.
      -----função-----
      <p id="demo"></p>
      <script>
      document.getElementById("demo").innerHTML =
      Math.floor((Math.random() * 22) + 1);        
      </script>
      ----------
       <img src="imagens/('#demo').jpg" alt="Card">
       
      Eu ja tentei:
      ('#demo')
      '#demo'
      "#demo"
      Nada funciona.
       
      Por favor me dem uma luz, não manjo de java
      Obrigado
    • By leodamian
      Bom Dia !
       
        Estou iniciando no sql e preciso de um help na seguinte questão:
       
      Quero extrair o primeiro e segundo nome de um campo no oracle.
      EX: 
      Nome_Completo 
      LEONARDO FRANCISCO FLORIO DAMIAN
      JULIANO FRANCISCO FLORIO
      MARIA ELOISA DA SILVA SAURO
       
      RESULTADO
      LEONARDO FRANCISCO
      JULIANO FRANCISCO
      MARIA ELOISA
       
       
       
    • By danisj
      #include<iostream>
      using namespace std;
      int BuscaBin (int lista[], int baixo, int alto, int chave)
      {
          int central;
          int valorcentral;
          while (baixo <= alto)
          {
              central = (baixo + alto)/2;
              valorcentral = lista[central];
              if (chave == valorcentral)
                  return central;
              else if (chave < valorcentral)
                  alto = central -1;
              else
                  baixo = central + 1;
          }
      }
      int main()
      {
          int a[10];
          int chave, pos;
          cout << "Introduza uma lista de 10 inteiros:";
          for (pos = 0; pos < 10; pos++)
              cin >> a[pos];
          cout << "Introduza chave a buscar:";
          cin >> chave;
          pos = 0;
          while ((pos = BuscaBin(a, 0, 9, chave))!= -1)
          {
              pos++;
          }
          cout << chave << " está na lista "  << " vezes na lista " << endl;
      }
          
      O objetivo é inserir uma lista e resultar  numa busca binária e ele retornar a chave, não posso alterar a função BuscaBin
    • By Matex5
      Sua tarefa é implementar uma árvore de busca binária que armazene strings. A ordem de inserção deverá ser alfabética crescente, ou seja, se o valor do elemento da raiz for “iguana”, então a palavra “beterraba” deverá ser inserida na subárvore da esquerda, enquanto a palavra “pagode” deverá ser inserida na subárvore da direita.
      Devem ser declaradas a struct e implementadas as seguintes funções da árvore:
      • criar(): inicialização da árvore.
      • buscar(): busca de um elemento na árvore.
      • inserir(): inserção de um elemento na árvore.
      • remover(): remove um elemento da lista.
      • estaVazia(): retorna um booleano indicando se a árvore está vazia.
      • ehEstritamenteBinaria(): retorna um booleano indicando se a árvore é estritamente binária.
      • ehQuaseCompleta(): retorna um booleano indicando se a árvore é quase completa.
      • ehCompletaCheia(): retorna um booleano indicando se a árvore é completa (cheia).
      • preOrdem(): visita e imprime os elementos da árvore em PRÉ-ORDEM (“RED”).
      • emOrdem(): visita e imprime os elementos da árvore EM-ORDEM (“ERD”).
      • posOrdem(): visita e imprime os elementos da árvore em PÓS-ORDEM (“EDR”). Após implementar a estrutura de dados, escreva um programa em C/C++ que permita ao usuário executar as funções acima

    • By FineMustache
      Fiz um programa que calcula o reajuste de salário de 5 funcionários armazenando seus nomes e salários em vetores, porém o salário já reajustado aparece com o mesmo valor do salário original.
      /* Armazenar o nome e o salário de 5 funcionários. Após o cadastro destas informações, deverá ser digitado o índice de reajuste salarial para todos os funcionários. O programa deverá calcular o novo salário e exibir todos os dados na tela */ #include <iostream> #include <locale.h> #include <string> #include <string> #include <stdlib.h> #include <cstdlib> using namespace std; int main() { setlocale(0, "Portuguese"); system("color 0a"); system("MODE CON COLS=150 LINES=40"); string nomefunc[5]; double slfunc[5], slnovo[5]; int reaj, i; cout << "\n\tArmazenar o nome e o salário de 5 funcionários. Após o cadastro destas informações, deverá ser digitado o índice de reajuste salarial para todos os funcionários. O programa deverá calcular o novo salário e exibir todos os dados na tela"; cout << "\n\n\tDigite a porcentagem do reajuste (sem o sinal %): "; cin >> reaj; for (i=0; i<5; i++){ cout << "\n\n\tDigite o nome do funcionário: "; cin >> nomefunc[i]; cout << "\n\n\tDigite o salário de " << nomefunc[i] <<": "; cin >> slfunc[i]; slnovo[i] = slfunc[i] - slfunc[i] * (reaj / 100); } cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[0] << ") era de R$" << slfunc[0] << " e passará a ser de R$" << slnovo[0] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do segundo funcionário (" << nomefunc[1] << ") era de R$" << slfunc[1] << " e passará a ser de R$" << slnovo[1] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[2] << ") era de R$" << slfunc[2] << " e passará a ser de R$" << slnovo[2] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[3] << ") era de R$" << slfunc[3] << " e passará a ser de R$" << slnovo[3] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[4] << ") era de R$" << slfunc[4] << " e passará a ser de R$" << slnovo[4] << " com o reajuste de " << reaj << "%."; system ("PAUSE>NULL"); }  
×

Important Information

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