Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0

Pergunta

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 resposta a esta questão

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por josenilson
      Olá pessoal !
       
      Estou tentando rodar um projeto de um jogo na minha maquina porem o mesmo pede para adicionar o log4cxx 0.10.0, realizei pesquisas na internet a respeito mas até agora nada, Encontre para baixar nesse site https://logging.apache.org/log4cxx/1.0.0/download.html porem não sei se devo instalar ele no windows porque ao exportar ele no projeto as depêndencias que precisam dele ficam informando o erro log4cxx.logger.h no such file or directory. a linguagem que estou usando e C++
       
       
    • Por Leandro T.
      pessoal bom dia alguém poderia me ajudar com o FormValidation?
       
      "nomefuncionario": {
                  validators: {
                      
                  
                    notEmpty: {
                      message: "Nome completo do funcionário é obrigatório."
                    } , <=== este funciona normalmente
                      
                      callback: {  // agora o callback nao consigo fazer funcionar
                              message: 'este nome não é valido',
                              callback: function (input) {
                                  if (input.value = 'algum valor digitado') {
                                      return true
                                  } }},
                      
                      
                      
                  }
    • Por nathanmoreira
      Após diversos cálculos provindos de um código, recebo um número inteiro ao qual não sei o tamanho ao certo (pode variar de 1 pra frente). Quero passar esse número para string e formatar ele de maneira a colocar um ,00 no final e, a cada 3 números antes da virgula, um ponto. Ou seja, deixar o número num formato como: 45.114.477,00
       
      Como fazer? 
    • Por TK_T
      olá sou iniciante consegui fazer um o código de um exercício só que quando eu peço o valor 12ab ele lê como numérica alguém pode me ajudar? 
      Exercício: Leia uma string e diga se a mesma é numérica (na base decimal) ou não.
      Ex.: "123" -> numérica
      "abc" -> não numérica
      "12ab" -> não numérica
      "12.34" -> numérica 
      #include <stdio.h> int main() { char Numero; printf("Digite Algo: "); scanf("%c", &Numero); if(Numero == '1' || Numero == '2' || Numero == '3' || Numero == '4' || Numero == '5' || Numero == '6' || Numero == '7' || Numero == '8' || Numero== '9' || Numero == '0') printf("\tNumérica...\n"); else printf("\tNão Numérica\n"); return 0; }  
    • Por clayton.lima2020
      Boa Tarde!
       
      Pessoal estou com um problema para resolver:
       
      Tenho um uma string que é um Nome:  SYLVIA
       
      Eu preciso fazer uma uma busca nessa string achar a letra Y e depois verificar se após a letra Y a próxima letra é Vogal ou Consoante.
       
      No caso do nome SYLVIA a próxima letra é L então retorna Consoante.
       
      Alguém sabe montar esse algoritmo ai?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.