5.11. Escreva as seguintes funções

11.1 int isdigit(char c) Verdade caso c seja um digito. Falso, caso o contrário.

11.2 int isalpha (char c) Verdade caso c seja uma letra do alfabeto, maiúscula ou minúscula. Falso, caso o contrário.

11.3 int isalnum (char c) Verdade caso c seja uma um dígito ou uma letra do alfabeto. Falso, caso o contrário.

11.4 int islower (char c) Verdade caso c seja uma letra minúscula. Falso, caso o contrário.

11.5 int supper (char c) Verdade caso c seja uma letra maiúscula. Falso, caso o contrário.

11.6 int isspace (char c) Verdade caso c seja um espaço ou um tab. Falso, caso o contrário.

11.7 char tolower (char c) Devolve o valor do caractere c transformado em minúsculas.

11.8 char toupper (char c) Devolve o valor do caractere c transformado em maiúsculas.

Passo 1

Essa aqui parece longa, mas a gente vai conseguir resolver tudo.

Bom o segredo aqui é incluir uma biblioteca. Você viu a nota do exercício? Ela pede para na primeira linha escrever:

# i n c l u d e < c t y p e . h >

Essa linha inclui uma biblioteca, e essa biblioteca tem todas as funções que a gente precisa.

Por exemplo, para resolver a 11.1 basta a gente fazer:

# i n c l u d e   < s t d i o . h >

# i n c l u d e   < c t y p e . h >

i n t   m a i n ( )

{

c h a r   c = ' c ' ;

        i f   ( i s d i g i t   ( c ) )

                p r i n t f   ( " V e r d a d e " ) ;

        e l s e      

                p r i n t f   ( " F a l s o " ) ;

r e t u r n   0 ;

}

Viu? A gente nem precisou escrever a função, ele já está na biblioteca. Mas vamos fazer tudo isso manualmente agora.

Passo 2

Começando pela 11.1, vamos verificar se c é um digito. Para fazer isso é só colocar numa condicional, se respeitar a condição retorna verdadeiro, se não respeitar retorna falso:

i n t   i s d i g i t   ( c h a r   c )

{

        r e t u r n   ( c > = ' 0 '   & &   c < = ' 9 ' ) ;

}

Olha só, se c estiver entre 0 e 9 retorna verdadeiro, e aí a gente sabe que é um dígito.

Passo 3

A gente pode seguir exatamente o mesmo raciocínio para fazer a 11.2, vamos fazer:

i n t   i s a l p h a   ( c h a r   c )

{

        r e t u r n   ( c > = ' a '   & &   c < = ' z '   | |     c > = ' A '   & &   c < = ' Z ' ) ;

}

Não esquece de colocar as maiúsculas também.

Passo 4

Para 11.3 vamos juntar todo que a gente já fez:

i n t   i s a l n u m   ( c h a r   c )

{

        r e t u r n   ( c > = ' 0 '   & &   c < = ' 9 '   | |     c > = ' a '   & &   c < = ' z '   | |     c > = ' A '   & &   c < = ' Z ' ) ;

}

A gente também pode escrever assim:

i n t   i s a l n u m   ( c h a r   c )

{

        r e t u r n   ( i s d i g i t   c h a r   c   | |   i s a l p h a   ( c h a r   c )   ) ;

}

Passo 5

Se você entendeu a 11.2 essa você faz fácil.

i n t   i s l o w e r   ( c h a r   c )

{

        r e t u r n   (   c > = ' a '   & &   c < = ' z ' ) ;

}

É o alfabeto sem as maiúsculas.

E aqui a gente já pode emendar a 11.5, que basta fazer o alfabeto sem as minúsculas:

i n t   i s u p p e r   ( c h a r   c )

{

        r e t u r n   (   c > = ' A '   & &   c < = ' Z ' ) ;

}

Passo 6

Agora vamos para 11.6, essa fica assim:

i n t   i s s p a c e   ( c h a r   c )

{

        r e t u r n   (   c > = ' '   & &   c < = ' \ t ' ) ;

}

Aquele /t significa o tab.

Passo 7

Chegamos na 11.7. Essa aqui vai ser um pouquinho diferente, agora a gente vai fazer uma transformação. A ideia é a seguinte, se a letra for minúscula ou dígito a gente devolve a mesma entrada, se for maiúscula a gente devolve a letra minúscula.

i n t   t o l o w e r   ( c h a r   c )

{

        i f   ( c > = ' A '   & &   c < = ' Z ' )

        r e t u r n   c   +   ' a '   -   ' A '

        e l s e

        r e t u r n   c ;        

}

Olha lá, a gente fez uma operação matemática com caracteres, se você não entendeu dá uma olhada na tabela ascii, e com ela que a gente tá mexendo ali. Aquela operação transforma todas as letras maiúsculas em minúsculas.

Passo 8

E para fazer a 11.8 é só fazer ao contrário:

i n t   t o u p p e r   ( c h a r   c )

{

        i f   ( c > = ' a '   & &   c < = ' z ' )

        r e t u r n   c     +   ' A ' - ' a ' ;

        e l s e

        r e t u r n   c ;        

}

E finalmente terminamos.

Resposta

11.1

i n t   i s d i g i t   ( c h a r   c )

{

        r e t u r n   ( c > = ' 0 '   & &   c < = ' 9 ' ) ;

}

11.2

i n t   i s a l p h a   ( c h a r   c )

{

        r e t u r n   ( c > = ' a '   & &   c < = ' z '   | |     c > = ' A '   & &   c < = ' Z ' ) ;

}

11.3

i n t   i s a l n u m   ( c h a r   c )

{

        r e t u r n   ( c > = ' 0 '   & &   c < = ' 9 '   | |     c > = ' a '   & &   c < = ' z '   | |     c > = ' A '   & &   c < = ' Z ' ) ;

}

11.4

i n t   i s l o w e r   ( c h a r   c )

{

        r e t u r n   (   c > = ' a '   & &   c < = ' z ' ) ;

}

11.5

i n t   i s u p p e r   ( c h a r   c )

{

        r e t u r n   (   c > = ' A '   & &   c < = ' Z ' ) ;

}

11.6

i n t   i s s p a c e   ( c h a r   c )

{

        r e t u r n   (   c > = ' '   & &   c < = ' \ t ' ) ;

}

11.7

i n t   t o l o w e r   ( c h a r   c )

{

        i f   ( c > = ' A '   & &   c < = ' Z ' )

        r e t u r n   c   +   ' a '   -   ' A '

        e l s e

        r e t u r n   c ;        

}

11.8

i n t   t o u p p e r   ( c h a r   c )

{

        i f   ( c > = ' a '   & &   c < = ' z ' )

        r e t u r n   c     +   ' A ' - ' a ' ;

        e l s e

        r e t u r n   c ;        

}