Busca em texto - Lista encadeada
Publicado por Danilo Azevedo (última atualização em 28/07/2014)
[ Hits: 6.240 ]
Download EditorDeTexto(buscaEmTexto.c
Este programa é um editor de texto, onde o usuário entra com o texto na quantidade de linhas que desejar, e para terminar a digitação entra com um ponto ".". Depois disso, para buscar as palavras no texto é necessário entrar com o padrão:
p seguidodapalavra
Exemplo de teste (entrada):
teste de arquivo de entrada primeira linha
segunda linha
.
p linha
p casa
e
Outro exemplo de entrada:
palavra nude casa rato pois porem alfa omega
mega fire pois alguns danilo dan dann dando.
p casa
Exemplo de saída:
palavra: casa
linha: 1 posicao: 14
Após executar o programa a digitação do texto poderá ocorrer imediatamente ou quando quiser (sem precisar de paramento nenhum).
Para buscar no texto entre com a letra "p".
Para encerrar o programa entre com a letra "e".
/* UNIVERSIDADE FEDERAL DA BAHIA
CURSO: BACHARELADO EM CIENCIA DA COMPUTACAO
ESTRUTURA DE DADOS E ALGORITMOS
DANILO AZEVEDO SANTOS E DANILLO LIMA
COMPETICAO DE ESTRUTURA DE DADOS
EXPLICACAO, RESOLVI CONSIDERAR COMO QUE UMA LINHA TEM 100 CARACTERES PARA OS MEUS TESTES,
CASO QUEIRA ALTERAR PODERA VISTO ESSA ALTERAÇÃO SE DARA PELO VARIAVEL TEXTO[100] NA FUNCAO MAIN E ALTERAR
TAMBEM O if((texto[i] == '\n') || (i == 100)) O i PARA O MESMO VALOR DE DA VARIAVEL NA LINHA 48
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* numero maximo de caracteres por linha */
typedef struct blocoLista{
char palavra[100];
int posicao, linha;
int id;
struct blocoLista *prox, *ptr;
}blocoLista, *Lista;
void limpaStrings(char texto[]);
void beginList(Lista *l);int contId(char* s);
void destrincharlinha(char texto[], int linha, Lista *l);
Lista guardaPalavra(Lista *l, char texto[], int linha, int posicao);
Lista mostraTudo(Lista *l, int id);
Lista consultaId(Lista *l, int id);
int main(){
int i=-1, j=0, r, x, k, id;
char texto[100], entrada[56], aux[51]; Lista lista;
beginList(&lista);
while(texto[i]!='.'){
i++;
scanf("%c",&texto[i]);
if((texto[i] == '\n') || (i == 100)){
j++;
destrincharlinha(texto,j,&lista);
limpaStrings(texto);
i = -1;
}
}
while(entrada[0]!= 'e'){
fflush(stdin);gets(entrada);
switch(entrada[0]){
case 'p':
{
r = 0;
k = 2; x = 0;
while(entrada[k]!='{FONTE}'){
aux[x] = entrada[k];
x++; k++;
}
aux[x] = '{FONTE}';
limpaStrings(entrada);
printf("palavra: ");puts(aux);
//printf("\n");
id = contId(aux);
mostraTudo(&lista,id);
limpaStrings(aux);
}
break;
default:
break;
}
}
return 0;
}
void beginList(Lista *l){
(*l) = NULL;
}
Lista guardaPalavra(Lista *l, char texto[], int linha, int posicao){
blocoLista *novo; int i;
//Lista aux;
int id = contId(texto);
novo = (blocoLista*)malloc(sizeof(blocoLista));
novo->id = id;
i = (posicao+1 - (strlen(texto)));
novo->prox = (*l);
(*l) = novo;
novo->ptr = NULL;
strcpy(novo->palavra,texto);
novo->linha = linha; novo->posicao = i;
return novo;
}
void destrincharlinha(char texto[], int linha, Lista *l){
char palv[100]; int i, j=0;
for(i = 0; texto[i]!= '{FONTE}'; i++){
if(texto[i] != ' '){
palv[j] = texto[i];
j++;
}
if(texto[i] == ' '){
palv[j] = '{FONTE}';
guardaPalavra(l,palv,linha,i);
limpaStrings(palv);
j=0;
}
if(texto[i]== '\n'){
palv[j-1] = '{FONTE}';
guardaPalavra(l,palv,linha,i);
limpaStrings(palv);
j=0;
}
}
}
void limpaStrings(char texto[]){
int i;
for(i=0; i<100; i++){
texto[i]='{FONTE}';
}
}
Lista mostraTudo(Lista *l, int id){
int cont =0;
Lista p;
for(p=*l; p!=NULL; p=p->prox){
if(id == p->id){
printf("linha: %d posicao: %d\n",p->linha,p->posicao);
cont++;
}
}
if (cont ==0) {
printf("nao ocorre no texto\n");
return NULL;}
return NULL;
}
int contId(char* s){
int i;
int total = 0;
for (i=0; s[i]!='{FONTE}'; i++)
total += s[i];
return total;
}
Lista consultaId(Lista *l, int id){
Lista p;
for(p=(*l); p!=NULL; p=p->prox){
if(id == p->id){
return p;
}
else
return NULL;
}
return NULL;
}
Busca, inserção e remoção de elementos numa lista
Rotina para controle de portas paralelas em C. (biblioteca LP.h)
Classe para manipulação e conversão de datas para std::string em C++
Rotação à esquerda árvore Binária
Nenhum comentário foi encontrado.
Papagaiando o XFCE com temas e recursos
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Removendo entradas de boot UEFI "fantasmas" via terminal
Atualizações de Segurança Automáticas no Debian
Como cortar as partes de um vídeo com passagens de áudio em branco
Tiling automático no KDE Plasma
SNMP Scan no OCS Inventory só funciona com HTTPS corretamente configurado
Tentativa de instalar Linux em um notebook HP 246 G6 (1)
Reflexão sobre a sobrevivência do Gentoo Linux (4)
Alguém tem que acabar com ANATEL!!! (1)
GOG confirma suporte oficial ao sistema Linux: "o trabalho começo... (4)









