Este projeto visa implementar um verificador ortográfico, que recebe um texto como entrada e produz o mesmo texto na saída, com as palavras potencialmente incorretas indicadas entre colchetes ([…]). Uma palavra é considerada potencialmente incorreta se não for encontrada em um arquivo de dicionário.
Construa um programa para verificar a ortografia das palavras de um texto lido da entrada padrão (stdin). A saída padrão (stdout) deve reproduzir fielmente o texto de entrada, mas colocando as palavras que não estão no dicionário entre colchetes. O dicionário está disponível no arquivo /usr/share/dict/brazilian
(em distribuições Linux populares).
Consideram-se palavras como sequências contíguas de letras (A-Z, a-z) com ou sem acentos; os demais caracteres (números, espaços e outros símbolos) não fazem parte de palavras.
Por exemplo, para esta entrada:
Para que o pocessador possa interromper a execução de uma tarefa e retornar a ela mais tarde, sem corromper seu estado interno, é necessário definir operações para salvar e restaurrar o contexto da tarefa. O ato de salvar os valores do contexto atual em seu TCB e possivelmente restaurar o contexto de outra tarefa, previamente salvo em outro TCB, é denominado "troca de contexto".
O programa deve gerar esta saída:
Para que o [pocessador] possa interromper a execução de uma tarefa e retornar a ela mais tarde, sem corromper seu estado interno, é necessário definir operações para salvar e [restaurrar] o contexto da tarefa. O ato de salvar os valores do contexto atual em seu [TCB] e possivelmente restaurar o contexto de outra tarefa, previamente salvo em outro [TCB], é denominado "troca de contexto".
Forma de chamada:
./ortografia < entrada.txt > saida.txt
Exemplos de arquivos de texto com erros de ortografia (baixe com “salvar como”, para evitar conversões de caracteres indesejadas):
A implementação deve atender os seguintes requisitos:
/usr/share/dict/brazilian
(não copiar o arquivo para seu diretório); no Ubuntu e derivados, esse arquivo é provido pelo pacote wbrazilian.ortografia
Makefile
com ao menos os alvos all
, clean
e purge
-Wall
bigfile.txt
em menos de 2 segundos.
Para medir o tempo de execução do programa, use o comando time
:
time ./ortografia < bigfile.txt > output.txt
Arquivos a entregar ao professor:
ortografia.c
: programa principaldicionario.c
: funções relativas ao dicionário (carregar o dicionário na memória, verificar se uma palavra está no dicionário, etc);dicionario.h
: interface (protótipos) das funções implementadas em dicionario.c
;Makefile
Dica: as funções da biblioteca C padrão (StdLib) podem facilitar a implementação de seu programa:
fopen
, fclose
, fgetchar
fscanf
, feof
, rewind
, …strcpy
, strlen
, strchr
, index
, strpbrk
, strstr
, …bsearch
Consulte as páginas de manual para aprender a usar essas funções.
Sugestão de pseudocódigo para o programa:
ler o dicionário c = ler caractere enquanto não for o fim da entrada faça // avançar até encontrar uma letra ou o fim da entrada enquanto (c não for uma letra) e (não for o fim da entrada) faça escrever c c = ler caractere fim enquanto // encontrou uma letra, ler a palavra palavra = "" enquanto (c for uma letra) e (não for o fim da entrada) faça palavra = palavra + c c = ler caractere fim enquanto // tratar a palavra encontrada se palavra <> "" então se minuscula(palavra) está no dicionario então escrever palavra senão escrever "[", palavra, "]" fim se fim se fim enquanto