Namensräume
Varianten
Aktionen

std::isdigit

Von cppreference.com
< cpp‎ | string‎ | byte
 
 
 
 
Definiert in Header <cctype>
int isdigit( int ch );

Prüft, ob das gegebene Zeichen eine der 10 Dezimalziffern ist: (0123456789).

Das Verhalten ist undefiniert, wenn der Wert von ch nicht als unsigned char darstellbar ist und nicht gleich EOF ist.

Inhalt

[edit] Parameter

ch - zu klassifizierendes Zeichen

[edit] Rückgabewert

Ein von Null verschiedener Wert, wenn das Zeichen ein numerisches Zeichen ist, andernfalls Null.

[edit] Hinweise

isdigit und isxdigit sind die einzigen Standardfunktionen zur Klassifizierung schmaler Zeichen, die nicht von der aktuell installierten C-Locale beeinflusst werden. Obwohl einige Implementierungen (z. B. Microsoft in der 1252 Codepage) zusätzliche Single-Byte-Zeichen als Ziffern klassifizieren können.

Wie alle anderen Funktionen aus <cctype> ist das Verhalten von std::isdigit undefiniert, wenn der Wert des Arguments weder als unsigned char darstellbar ist noch gleich EOF ist. Um diese Funktionen sicher mit normalen chars (oder signed chars) zu verwenden, sollte das Argument zuerst in unsigned char konvertiert werden.

bool my_isdigit(char ch)
{
    return std::isdigit(static_cast<unsigned char>(ch));
}

Ebenso sollten sie nicht direkt mit Standardalgorithmen verwendet werden, wenn der Werttyp des Iterators char oder signed char ist. Konvertieren Sie stattdessen den Wert zuerst in unsigned char.

int count_digits(const std::string& s)
{
    return std::count_if(s.begin(), s.end(),
                      // static_cast<int(*)(int)>(std::isdigit)         // wrong
                      // [](int c){ return std::isdigit(c); }           // wrong
                      // [](char c){ return std::isdigit(c); }          // wrong
                         [](unsigned char c){ return std::isdigit(c); } // correct
                        );
}

[edit] Beispiel

#include <cctype>
#include <climits>
#include <iostream>
 
int main(void)
{
    for (int i = 0; i <= UCHAR_MAX; ++i)
        if (std::isdigit(i))
            std::cout << static_cast<unsigned char>(i);
    std::cout << '\n';
}

Ausgabe

0123456789

[edit] Siehe auch

prüft, ob ein Zeichen von einer Locale als Ziffer klassifiziert wird
(Funktionstemplate) [bearbeiten]
prüft, ob ein breites Zeichen eine Ziffer ist
(Funktion) [bearbeiten]
C-Dokumentation für isdigit
ASCII-Werte Zeichen

iscntrl
iswcntrl

isprint
iswprint

isspace
iswspace

isblank
iswblank

isgraph
iswgraph

ispunct
iswpunct

isalnum
iswalnum

isalpha
iswalpha

isupper
iswupper

islower
iswlower

isdigit
iswdigit

isxdigit
iswxdigit

dezimal hexadezimal oktal
0–8 \x0\x8 \0\10 Steuercodes (NUL, etc.) ≠0 0 0 0 0 0 0 0 0 0 0 0
9 \x9 \11 Tabulator (\t) ≠0 0 ≠0 ≠0 0 0 0 0 0 0 0 0
10–13 \xA\xD \12\15 Leerzeichen (\n, \v, \f, \r) ≠0 0 ≠0 0 0 0 0 0 0 0 0 0
14–31 \xE\x1F \16\37 Steuercodes ≠0 0 0 0 0 0 0 0 0 0 0 0
32 \x20 \40 Leerzeichen 0 ≠0 ≠0 ≠0 0 0 0 0 0 0 0 0
33–47 \x21\x2F \41\57 !"#$%&'()*+,-./ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
48–57 \x30\x39 \60\71 0123456789 0 ≠0 0 0 ≠0 0 ≠0 0 0 0 ≠0 ≠0
58–64 \x3A\x40 \72\100 :;<=>?@ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
65–70 \x41\x46 \101\106 ABCDEF 0 ≠0 0 0 ≠0 0 ≠0 ≠0 ≠0 0 0 ≠0
71–90 \x47\x5A \107\132 GHIJKLMNOP
QRSTUVWXYZ
0 ≠0 0 0 ≠0 0 ≠0 ≠0 ≠0 0 0 0
91–96 \x5B\x60 \133\140 [\]^_` 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
97–102 \x61\x66 \141\146 abcdef 0 ≠0 0 0 ≠0 0 ≠0 ≠0 0 ≠0 0 ≠0
103–122 \x67\x7A \147\172 ghijklmnop
qrstuvwxyz
0 ≠0 0 0 ≠0 0 ≠0 ≠0 0 ≠0 0 0
123–126 \x7B\x7E \172\176 {|}~ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
127 \x7F \177 Rücktaste (DEL) ≠0 0 0 0 0 0 0 0 0 0 0 0