Google

segunda-feira, 5 de julho de 2010

Exemplos da utilização de funções do C, como isdigit(), isalpha().

Olhando em alguns blogs notei que havia uma certa dificuldade na utilização de algumas funções do C, como isdigit(), isalpha() e etc... então resolvi fazer um exemplo bem prático de sua utilização. Pode ser notado que pode ser aproveitado a mesma lógica nas diferentes funções de acordo com a necessidade de sua utilização. Essas funções trabalham caracter à caracter, isso poderá ser observado no exemplo abaixo. A mesma situação pode ser aplicado para isalnum(), tolower(), toupper().


#include
#include
#include

int main(void)
{
char carac[20] = "marcos508jdalte";

int num;
int i;

for(i=0;carac[i]!='\0';i++){
if(isalpha(carac[i]))
printf("letra %c\n", carac[i]);
else
printf("Diferente de letra %c\n", carac[i]);
}

for(i=0;carac[i]!='\0';i++){
if(isdigit(carac[i]))
printf(" isdigit %c\n", carac[i]);
else
printf("Diferente de isdigit %c\n", carac[i]);
}

num = isdigit(carac[2]);
printf(" num isdigit %d\n", num);

return 0;
}

domingo, 30 de maio de 2010

Validando o formato do email informado

Nesse exemplo é passado como argumento um email e validado se não possui nenhuma restrição imposta para caracter inválido e formato.


#include < stdio.h >
#include < stdlib.h >
#include < unistd.h >
#include < string.h >
#include < ctype.h >

int caracter_invalido_email(char * email)
{
char * walker = NULL;
char *caracter = "#$%¨*()+=-/´`^~[]{}<>;;:?";
int i;
walker = email;
while ((walker != NULL) && (*walker != '\0'))
{
for(i = 0; *(caracter+i) != '\0'; i++){
if(*walker == *(caracter+i)){
printf("Caracter invalido encontrado %c\n", *(caracter+i));

return -1;
}
}

walker++;
}

return 0;
}




void consist_email(char * email)
{
char *walker = NULL;
int size;
int found_at;
int found_dot;
int found_last_dot=0;

found_at = found_dot = -1;
size = 0;

printf("Iniciando a função \n\n");
walker = email;
printf("Posicao do Ptr %c \n\n",*walker);

printf("Walker %s \n\n", walker);
while ((walker != NULL) && (*walker != '\0'))
{
printf("Entrando no while %c \n\n",*walker);
if (*walker == '@')
{
/* Search for @ */
printf("Iniciando walker==@ \n");
if (found_at == -1)
{
printf("Iniciando walker==@ found at==-1 \n");
found_at = 0;
}else{
/* only one @ */
printf(" ERRO MAIS DE UM @ \n");
return;
}
if(*(walker+1)== '.'){
printf("ERRO . after @ \n");
return;
}
if(*(walker-1)== '.'){
printf("ERRO . before @ \n");
return;
}

}
if (*walker == '.')
{
if(*(walker+1)== '.'){
printf("ERRO . after . \n");
return;
}
if(*(walker-1)== '.'){
printf("ERRO . before . \n");
return;
}

}
if (*walker == ' ') {
/* no space allowed */
printf("ERRO NENHUM ESPAÇO É PERMITIDO\n");
return;
}


/*Não pode letra maiúscula*/
if (isupper(*walker))
{
printf("upper case letter not allowed\n\n");
return;
}
found_last_dot = 0;
if(*walker == '.')
{
found_last_dot = 1;
}

size++;
walker++;
}


if(found_last_dot == 1)
{
printf("Erro email terminando com .\n\n");
}

return;
}



int main(int argc, char *argv[]){

printf("argv %s\n",argv[1]);

char *email = NULL;
int i = 0;
email = malloc(30);
strcpy(email,argv[1]);

printf("Email %s\n", email);
printf("Email %c\n", *email);

for(i = 0; *(email+i) != '\0'; i++){
printf("Email %c\n", *(email+i));
}
int cond;
cond = caracter_invalido_email(email);
if(cond == -1)
return -1;

consist_email(email);



printf("Email %s\n", email);

free(email);

return 1;
}

quinta-feira, 1 de abril de 2010

Programa que gera um CPF válido de acordo com a entrada informada


#include < stdio.h >
#include < string.h >
#include < stdlib.h >
//programa para gerar valores de CPF
//será informado os 9 numeros do CPF e será gerado o digito verificador desse cpf
//Números do CPF 2 2 2 3 3 3 6 6 6
//valores definidos para calculo 10 9 8 7 6 5 4 3 2
//multiplica os numeros das colunas
// 20 18 16 21 18 15 24 18 12
//em seguida somatorio (162) resultado % 11
//em seguida 11 - resto da divisao
//se o resto for menor q 2 o digito é ZERO

int main(int argc, char *argv[]){
char *cpf = NULL;
char aux1;
char aux2[2];
char cpf_int[11];

int somador = 0, i = 0, aux = 0, first = 0;
int valor_definido = 10;

if (argc > 1){
cpf = argv[1];
}else{
printf("./gerar_cpf \n");
return -1;
}

if (strlen(cpf) != 9 ){
printf("Deve ser informado apenas [9] digitos\n");
return -1;
}
for(i=0;i<9;i++){
aux1 = cpf[i];
sprintf(aux2,"%c", aux1);
aux = atoi(aux2);
somador += aux*valor_definido;
printf(" %d +=%d[%d] * %d \n", somador, aux, i, valor_definido);
valor_definido--;
cpf_int[i]=aux;
}
first = somador % 11;
printf("Mod first %d\n",first);
if(first < 2){
cpf_int[9] = 0;
}else{
cpf_int[9] = 11-first;

printf("digito 1: %d\n ",cpf_int[9]);
}
printf("Cpf com o primeiro digito");
for(i=0;i<10;i++){
printf("%d:",cpf_int[i]);
}
printf("\nCalculando o segundo Digito\n");
somador = 0;
valor_definido = 11;

for(i=0;i<10;i++){
aux = cpf_int[i];
somador += aux*valor_definido;
printf(" %d +=%d[%d] * %d \n", somador, aux, i, valor_definido);
valor_definido--;
}

first = somador % 11;
printf("Mod first %d\n",first);
if(first < 2){
cpf_int[10] = 0;
}else{
cpf_int[10] = 11-first;
printf("digito 2: %d\n ",cpf_int[10]);
}

for(i=0;i<11;i++){
printf("%d:",cpf_int[i]);
if(i==2)
printf(".");
if(i==5)
printf(".");
if(i==8)
printf("-");

}
printf("\nSomatório [%d]\n",somador);
printf("ALL rights for Marcos Rosendo Dalte\n");
return 1;
}

sexta-feira, 12 de fevereiro de 2010

Calculando Idade a partir de uma data de nascimento em C

Quando precisei implementar um programinha pra calcular a idade de um indivíduo a partir da data de nascimento, consegui achar pouca coisa a respeito. Então vai aqui um programinha com essa dica:


#include < unistd.h >
#include < time.h >
#include < string.h >
#include < stdio.h >
#include < stdlib.h >

int main(void){
time_t t_fim;
struct tm *p_fim;
char buffer[20];
char *pAno, *pMes, *pDia;
char str_ano[5], str_mes[3], str_dia[3];
int ano, mes, dia, idade;
int idade_param = 13;
char *idade_min = NULL;
char data_nascimento[] ="26/09/2000";

time( & t_fim );
p_fim = localtime( & t_fim );

printf("%d\n",p_fim);

printf("data nascimento..: %s\n",data_nascimento);

strcpy( buffer, "\0" );
strncpy( buffer, data_nascimento, 10 );

pDia = strtok( buffer, "/" );
pMes = strtok( NULL, "/" );
pAno = strtok( NULL, "/" );

strncpy(str_dia, pDia, sizeof(str_dia));
strncpy(str_mes, pMes, sizeof(str_mes));
strncpy(str_ano, pAno, sizeof(str_ano));

str_dia[2]='\0';
str_mes[2]='\0';
str_ano[4]='\0';

ano = atoi( str_ano );
mes = atoi( str_mes );
dia = atoi( str_dia );

printf("dia..: %d\n",dia);
printf("mes..: %d\n",mes);
printf("ano..: %d\n",ano);

idade = p_fim->tm_year+1900 - ano;

printf("idade..: %d\s", idade);


if( p_fim->tm_mon+1 <>tm_mon+1 == mes ){
if( p_fim->tm_mday < dia ){
idade--;
}
if (idade >= idade_param){
printf("Idade [%d] maior que a idade minima [%d] - nao é necessario responsavel\n\n",idade, idade_param);
return 0;
}

}

os valores de data de nascimento e idade_param podem ser passados como argumentos de entrada do programa.

Postagens populares