
Enviado em 30/07/2017 - 19:43h
Preciso implementar um programa em C que leia o código fonte da página "Email address" do Wikipédia colocado em um arquivo "Entrada.txt" no diretório do programa em C, (fopen..., "r"), e imprima como resultado os e-mails válidos que estão no código, a partir de um automato finito deterministico, ou seja, com os estados em forma de função. Esse é código fonte: view-source:https://en.wikipedia.org/wiki/Email_address#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMAX 76959 //caracteres aceitos que são do tipo letra, num, ponto, traço, @
int SelecionaSimbolosValidos(char Simbolo);
void qInicial(char Simbolo[NMAX]);
void q0(int contador, char Simbolo[NMAX]);
void q1(int contador, char Simbolo[NMAX]);
void q2(int contador, char Simbolo[NMAX]);
void q3(int contador, char Simbolo[NMAX]);
void q4(int contador, char Simbolo[NMAX]);
void q5(int contador, char Simbolo[NMAX]);
void q6(int contador, char Simbolo[NMAX]);
void q7(int contador, char Simbolo[NMAX]);
void q8(int contador, char Simbolo[NMAX]);
void q9(int contador, char Simbolo[NMAX]);
void q10(int contador, char Simbolo[NMAX]);
void q11(int contador, char Simbolo[NMAX]);
void qErro(int Contador, char Simbolo[NMAX]);
int SelecionaSimbolosValidos(char Simbolo)
{
int aceita = 0, rejeita = 1;
if((Simbolo >= 'a' && Simbolo <= 'z') || (Simbolo >= 'A' && Simbolo <= 'Z')|| Simbolo == '@'
|| Simbolo == '-' ||Simbolo == '.' || ((Simbolo >= '0' && Simbolo <= '9')))
return aceita;
else
return rejeita;
}
void qInicial(char Simbolo[NMAX])
{
int contador = 0;
q0(contador, Simbolo);
}
void q0(int contador, char Simbolo[NMAX])
{
if(contador < NMAX){
if ((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z'))
{
printf("%c", Simbolo[contador]);
q1(++contador, Simbolo);
}
/*else
qErro(contador, Simbolo);*/
}
}
void q1(int contador, char Simbolo[NMAX])
{
if(contador < NMAX) {
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9'))
{
printf("%c", Simbolo[contador]);
q2(++contador, Simbolo);
}
else if (Simbolo[contador] == '@')
{
printf("%c", Simbolo[contador]);
q3(++contador, Simbolo);
}
else if (Simbolo[contador] == '-')
{
printf("%c", Simbolo[contador]);
q4(++contador, Simbolo);
}
/*else
qErro(++contador, Simbolo);*/
}
}
void q2(int contador, char Simbolo[NMAX])
{
if(contador < NMAX){
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9'))
{
printf("%c", Simbolo[contador]);
q2(++contador, Simbolo);
}
else if (Simbolo[contador] == '@')
{
printf("%c", Simbolo[contador]);
q3(++contador, Simbolo);
}
else {
q0(contador, Simbolo);
}
/*
else
qErro(contador, Simbolo); */
}
}
void q3(int contador, char Simbolo[NMAX])
{
if(contador < NMAX) {
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9'))
{
printf("%c", Simbolo[contador]);
q10(++contador, Simbolo);
}
else if ((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z'))
{
printf("%c", Simbolo[contador]);
q11(++contador, Simbolo);
}/*
else
qErro(contador, Simbolo);*/
}
}
void q4(int contador, char Simbolo[NMAX])
{
if(contador < NMAX) {
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9'))
{
printf("%c", Simbolo[contador]);
q5(++contador, Simbolo);
}/*
else
qErro(contador, Simbolo);*/
}
}
void q5(int contador, char Simbolo[NMAX])
{
if(contador < NMAX){
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9'))
{
printf("%c", Simbolo[contador]);
q5(++contador, Simbolo);
}
else if (Simbolo[contador] == '@')
{
printf("%c", Simbolo[contador]);
q3(++contador, Simbolo);
}
else if(Simbolo[contador] == '-')
{
printf("%c", Simbolo[contador]);
q4(++contador, Simbolo);
}/*
else
qErro(contador, Simbolo);*/
}
}
void q6(int contador, char Simbolo[NMAX])
{ if(contador < NMAX){
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9'))
{
printf("%c", Simbolo[contador]);
q7(++contador, Simbolo);
}/*
else
qErro(contador, Simbolo);*/
}
}
void q7(int contador, char Simbolo[NMAX])
{
if(contador < NMAX){
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9'))
{
printf("%c", Simbolo[contador]);
q7(++contador, Simbolo);
}
else if (Simbolo[contador] == '-')
{
printf("%c", Simbolo[contador]);
q8(++contador, Simbolo);
}
else if (Simbolo[contador] == '@')
{
printf("%c", Simbolo[contador]);
q3(++contador, Simbolo);
}/*
else
qErro(contador, Simbolo);*/
}
}
void q8(int contador, char Simbolo[NMAX])
{ if(contador < NMAX){
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9'))
{
printf("%c", Simbolo[contador]);
q9(++contador, Simbolo);
}/*
else
qErro(contador, Simbolo);*/
}
}
void q9(int contador, char Simbolo[NMAX])
{
if(contador < NMAX){
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9'))
{
printf("%c", Simbolo[contador]);
q9(++contador, Simbolo);
}
else if (Simbolo[contador] == '@')
{
printf("%c", Simbolo[contador]);
q3(++contador, Simbolo);
}
else if (Simbolo[contador] == '-')
{
printf("%c", Simbolo[contador]);
q8(++contador, Simbolo);
}/*
else
qErro(contador, Simbolo);*/
}
}
void q10(int contador, char Simbolo[NMAX])
{
if(contador < NMAX){
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')||
Simbolo[contador] == '-')
{
printf("%c", Simbolo[contador]);
q10(++contador, Simbolo);
}
else if (Simbolo[contador] == '.')
{
printf("%c", Simbolo[contador]);
q11(++contador, Simbolo);
}/*
else
qErro(contador, Simbolo);*/
}
}
void q11(int contador, char Simbolo[NMAX])
{ if(contador < NMAX){
if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') ||
(Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')
|| (Simbolo[contador] >= '0' && Simbolo[contador] <= '9'))
{
printf("%c", Simbolo[contador]);
q11(++contador, Simbolo);
}
}}
else
qErro(contador, Simbolo);
}
}
void qErro(int contador, char Simbolo[NMAX])
{
if(contador < NMAX)
q0(++contador, Simbolo);
else
exit(1);
}
int main()
{
int i = 0;
int teste_validacao;
int tamanho = 0;
char caracteres[NMAX];
char caracter;
FILE *arquivo;
arquivo = fopen("Entrada.txt", "r");
if (arquivo == NULL)
return EXIT_FAILURE;
while(!feof(arquivo))
{
caracter = getc(arquivo);
teste_validacao = SelecionaSimbolosValidos(caracter);
if(teste_validacao == 0)
{
caracteres[i] = caracter;
i++;
tamanho++;
}
}
qInicial(caracteres);
/*int j;
for(j = 0; j < tamanho; j++)
printf("%c", caracteres[j]);
printf("\nnumCaracteresValidos: %d\n", tamanho);
*/
fclose(arquivo);
return 0;
}
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Consertando o áudio com estalos e interrupções no Pipewire
Servidor Ubuntu 24.04 HD 500 não tenho espaço na \home\adminis... (3)
Dá para criar um bom jogo usando a linguagem de programação C? (0)
E como programar um sistema operacional inspirado no próprio linux usa... (3)
Como programar um sistema de controle para distribuições linux em c? ... (4)









