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;
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
UUID da partição efi mudou, multiboot já era...e agora? (0)