Google

sábado, 29 de junho de 2013

Array de ponteiros como parâmetro de uma função

Eu precisava de uma função que recebesse mais de um valor de strings, um ou mais parâmetros. Umas das soluções que achei foi essa, passar para a função um array de ponteiros, note que é necessário adicionar um NULL na última posição do array para informar o final do array.

#include 
#include 
#include 

int retorna(char **aux){
        int i = 0;
        while(aux[i]){
                printf("aux[%d] = %s \n",i,aux[i]);
                i++;
        }
        return 0;
}

int main(){
        static  char *aux[11];
        aux[0] = "Marcos";
        aux[1] = "Dalte";
        aux[2] = NULL;

        retorna(aux);

        return 0;
}
Veja mais em:
http://marcosdalte.blogspot.com.br/2008/04/retornando-um-vetor-em-uma-funo.html

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;
}

Postagens populares