
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;
}
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
O que houve com slackware ??? (12)
Alterar conteúdo de dica [RESOLVIDO] (3)
Vou destruir sua infância:) (5)









