2016-08-29 3 views
1

Ich habe die Funktion isnumber() in meinem ctype.h. Ich finde keine Hinweise auf diese Funktion in den Büchern, die ich weder in http://www.cplusplus.com/reference/cctype/ zur Konsultation habe. Ich beabsichtige, den Unterschied zwischen isdigit() und isnumber() an einem einfachen Beispiel zu erkennen und anzuzeigen, aber es gibt keine (U + 0C6A, U + 0ED2 und ½ sind durch die Funktionen nicht zu erkennen). Gibt es einen Unterschied? Wie könnte ich das auflösen?Was ist der Unterschied zwischen isdigit() und isnumber()?

int main(int, char *[]) 
{ 
    string text("Hello½123, Poly౪ ໒girl0.5!!!"); 
    decltype(text.size()) punct = 0, alpha = 0, number = 0, space = 0, digit = 0, graf = 0; 
    for(auto i : text) { 
     if(ispunct(i)){ 
      cout << i << "<punct "; 
      ++punct; 
     } 
     if(isalpha(i)) { 
      cout << i << "<alpha "; 
      ++alpha; 
     } 
     if(isnumber(i)) { 
      cout << i << "<number "; 
      ++number; 
     } 
     if(isdigit(i)) { 
      cout << i << "<digit "; 
      ++digit; 
     } 
     if(isgraph(i)) { 
      cout << i << "<graph "; 
      ++graf; 
     } 
     if(isspace(i)) 
      ++space; 
    } 
    cout << endl << "There is " << endl; 
    cout << punct << " puncts," << endl; 
    cout << alpha << " alphas," << endl; 
    cout << number << " numbers," << endl; 
    cout << digit << " digits," << endl; 
    cout << graf << " graphs," << endl; 
    cout << space << " spaces" << endl; 
    cout << "in " << text << endl; 

    return 0; 
} 

Ein Teil des Ergebnisses:

... 

5 numbers, 
5 digits, 
23 graphs, 
2 spaces 
in Hello½123, Poly౪ ໒girl0.5!!! 
+1

Welcher Compiler ist das und auf welcher Art von Maschine? – gpvos

Antwort

3

isdigit() funktioniert nur mit 0-9.

isnumber() ermöglicht andere Zahlenwerte wie Brüche. Einige Zeichen, die 'numerisch', aber keine Ziffern sind, enthalten 0x00b2 und 0x00b3, die hochgestellt sind 2 und 3 ('²' und '³') und die Glyphen, die Brüche wie '¼', '½' und '¾' sind.

+3

Woher kommt 'isnumber()'? Ich kann es nicht in Standard finden .. – songyuanyao

+0

@songyuanyao __DARWIN_CTYPE_TOP_inline int ISNUMBER (int _c) { \t return (__istype (_c, _CTYPE_D)); } von ctype.h – Isi

+3

@Ist Es scheint eine nicht standardmäßige Funktion zu sein, die von der Implementierung oder Plattform bereitgestellt werden kann. Ich will nur, wer es liefert, oder die Quelle der zitierten Informationen. – songyuanyao

4

isnumber() möglicherweise eine Apple-spezifische C++ - Methode (Ich habe keinen Mac zur Hand zu überprüfen). Sie können es in der Apple dev guide sehen:

The isnumber() function behaves similarly to isdigit() , but may recognize additional characters, depending on the current locale setting.


Außerdem ist isnumber() nicht auf Linux erklärt: ich g ++ 6.1.1 auf Linux 4.7.2 und den Fehler:

g++ a.cpp 
a.cpp: In function 'int main(int, char**)': 
a.cpp:20:17: error: 'isnumber' was not declared in this scope 
    if (isnumber(i)) { 
       ^

ich auch clang3.8.1 zu Test verwenden:

clang++ a.cpp --std=c++11 
a.cpp:20:7: error: use of undeclared identifier 'isnumber' 
       if (isnumber(i)) { 
        ^
+0

Der Compiler ist Apple LLVM Version 7.3.0 (clang-703.0.31). Sieh dir meine komment @ songyuanyao – Isi

+0

@ Toby Speight, danke. –

1

Die isnumber() Funktion wurde von Apple hinzugefügt, so dass Sie Apple-Dokumentation verwenden müssen.

Hier ist ein Angebot von the ctype.h manpage for iOS& dagger;:

STANDARDS 
    These functions, except for digittoint(), isascii(), ishexnumber(), 
    isideogram(), isnumber(), isphonogram(), isrune(), isspecial() and 
    toascii(), conform to ISO/IEC 9899:1990 (``ISO C90''). 

Die gleiche Seite verlinkt nicht wirklich auf eine Manpage isnumber(), aber ich die URL von den Links zu Hilfeseite für die Standardfunktionen hochgerechnet und fand this:

The isnumber() function behaves similarly to isdigit(), but may recognize 
additional characters, depending on the current locale setting. 

& Dolch; Ergebnis # 4 bei Google für isnumber ctype & hellip;

Verwandte Themen