Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

F_All

Por que não é necessário incluir o header <ctype.h> ?

Recommended Posts

Por que não é necessário incluir o header <ctype.h> no código abaixo para que funcione ?

 

 

 
# include <string>
# include <iostream>
using namespace std;
 
void main (void)
{
string a;
cout << "digite uma string!" << endl;
 
getline(cin,a);
 
cout << a[0] << endl; //exibe a primeira letra da string
 
if (isalpha(a[0])) //verifica a primeira letra da string. Por que não é necessário <ctype.h> ?
cout << "true alpha" << endl;
else if (isdigit(a[0])) //verifica a primeira letra da string. Por que não é necessário <ctype.h> ?
cout << "true digit" << endl;
else
cout << "false alpha and digit" << endl;
 
system ("pause");
 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Investiguei aqui o porque. Mas também não encontrei o motivo.

 

Sei que, em C++. O header locale, tem um template desta função. Talvez, ao incluir o iostream inclua o locale automatico. Mas, não tenho certeza.

 

Se alguém mais experiente poder explicar, fico grato. Pois também fiquei curioso...

 

Especificação isalpha:

http://www.cplusplus.com/reference/cctype/isalpha/?kw=isalpha

 

Espero ter ajudado, FLW!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Investiguei aqui o porque. Mas também não encontrei o motivo.

 

Sei que, em C++. O header locale, tem um template desta função. Talvez, ao incluir o iostream inclua o locale automatico. Mas, não tenho certeza.

 

Se alguém mais experiente poder explicar, fico grato. Pois também fiquei curioso...

 

Especificação isalpha:

http://www.cplusplus.com/reference/cctype/isalpha/?kw=isalpha

 

Espero ter ajudado, FLW!

 

Pesquisando aqui, vi que o <iostream> inclui o <istream> que por sua vez inclui o <ostream> que inclui o <ios> e por ai vai, procurei um pouco mais a fundo mas não encontrei a inclusão do <ctype> nem do <locale>. No entanto, reparei que é possível utilizar outras funções de outros headers, como a sqrt() do <math.h>.

 

Valeu pela força!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente a implementação do seu compilador está incluindo os headers <cmath> e <cctype> (ou <math.h> e <ctype.h>, respectivamente) ou no header <string> ou no header <iostream>.

 

Mas, para garantir compatibilidade entre compiladores, você deve incluir os headers necessitados explicitamente.

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente a função já está inclusa.

No MinGW, ela está na biblioteca "string->localefwd.h", "iostream->ostream->ios->localefwd.h" e "iostream->istream->ios->localefwd.h".

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.