vstachetti
(usa Ubuntu)
Enviado em 14/12/2014 - 00:34h
Pessoal, tudo bem?
Preciso fazer um exercicio, mas não sei como termina-lo. Segue a descrição do problema:
Descrição:
Faça um programa que leia um texto qualquer (arquivo no formato texto) e imprima, em ordem
alfabética, todas palavras
com 3
ou mais caracteres
e a linha na qual elas aparecem no texto. Por
exemplo, para o texto:
Um exemplo de entrada:
Entrada:
Um, dois, tres, testando.
Testando tres vezes.
Um teste final.
FIM
A saida deve ser algo parecido com ...
dois 1
final 3
testando 1, 2
teste 3
tres 1, 2
vezes 2
A leitura do arquivo deverá desprezar espaços em branco e sinais de pontuação, que serão
considerados separadores de palavras. O fim da leitura acaba quando for encontrado a palavra FIM,
que não deve ser contabilizada. Além disso, a leitura deverá converter todas as letras maiúsculas em
minúsculas. Você pode considerar que cada palavra contém no máximo 30 letras e que não haverá
caracteres acentuados.
Isso foi o que eu fiz até agora:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 5000
typedef struct arv {
char info[MAX];
int linha;
struct arv *esq;
struct arv *dir;
} T_Arv;
//--------cria árvore vazia ----------//
void criaArvVazia(T_Arv **arv){
*arv =NULL;
}
//-------- insere elementos na árvore ----------/
/* Arvore binaria onde os nodos sao inseridos de maneira ordenada: */
/* - Os nodos a esquerda de um nodo pai sao sempre menores que ele */
/* - Os nodos a direita de um nodo pai sao sempre maiores que ele */
int insereArv(T_Arv **arv, char v[]){
if (*arv == NULL){
*arv = (T_Arv*)malloc (sizeof(T_Arv));
strcpy((*arv)->info,v);
(*arv)->esq = (*arv)->dir = NULL;
}else{
if (strcmp (v, (*arv)->info) <0){
insereArv (&((*arv)->esq), v);
}else{
insereArv (&((*arv)->dir), v);
}
}
return 0;
}
//ordem assimétrica
void imprimeAssimetrico(T_Arv *arv){
if (arv != NULL && strlen(arv->info)>3){
imprimeAssimetrico(arv->esq);
puts(arv->info);
//printf("%s \n", arv->info);
imprimeAssimetrico(arv->dir);
}
}
//----------Busca Nó ----------------//
T_Arv* buscaNoArvore(T_Arv *arv, char v[]){
if (arv == NULL){
return NULL;
}else{
if (strcmp (v, arv->info) < 0){
return buscaNoArvore(arv->esq, v);
}else{
if (strcmp (v, arv->info) > 0){
return buscaNoArvore(arv->dir, v);
}
}
return arv;
}
}
int main (){
T_Arv *arvore;
char cond[MAX];
criaArvVazia(&arvore);
return 0;
}
Alguem pode me dar uma luz? hahahah não sei continuar