std::isxdigit

出自cppreference.com
< cpp‎ | string‎ | byte
在標頭 <cctype> 定義
int isxdigit( int ch );

檢查給定字符是否為十六進制數字字符(0123456789ABCDEFabcdef)。

ch 的值不能表示為 unsigned char 且不等於 EOF 則行為未定義。

目錄

[編輯] 參數

ch - 要分類的字符

[編輯] 返回值

若字符為十六進制數字字符則為非零值,否則為零。

[編輯] 註解

std::isdigitstd::isxdigit 是僅有的不受當前安裝的 C 本地環境影響的標準窄字符分類函數。儘管某些實現(例如 Microsoft 在 1252 代碼頁)可能分類另外的單字節字符為數字。

同所有其他來自 <cctype> 的函數,若實參值既不能表示為 unsigned char 又不等於 EOFstd::isxdigit 的行為未定義。為了以單純的 char(或 signed char)安全使用此函數,首先要將實參轉換為 unsigned char

bool my_isxdigit(char ch)
{
    return std::isxdigit(static_cast<unsigned char>(ch));
}

類似地,迭代器的值類型為 charsigned char 時,不應直接將它們用於標準算法。而是要首先轉換值為 unsigned char

int count_xdigits(const std::string& s)
{
    return std::count_if(s.begin(), s.end(),
                      // static_cast<int(*)(int)>(std::isxdigit)         // 错误
                      // [](int c){ return std::isxdigit(c); }           // 错误
                      // [](char c){ return std::isxdigit(c); }          // 错误
                         [](unsigned char c){ return std::isxdigit(c); } // 正确
                        );
}

[編輯] 示例

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

輸出:

0123456789ABCDEFabcdef

[編輯] 參閱

檢查字符是否被本地環境分類為十六進制數字
(函數模板) [編輯]
檢查寬字符是否為十六進制字符
(函數) [編輯]
isxdigit 的 C 文檔
ASCII 值 字符

iscntrl
iswcntrl

isprint
iswprint

isspace
iswspace

isblank
iswblank

isgraph
iswgraph

ispunct
iswpunct

isalnum
iswalnum

isalpha
iswalpha