# std::isdigit(std::locale)

< cpp‎ | locale

定义于头文件 `<locale>` |  |
template< class charT > bool isdigit( charT ch, const locale& loc ); |  |

检查给定字符是否为给定 locale 的 std::ctype 平面分类为数字。

### 参数

ch | - | 字符
loc | - | 本地环境

### 返回值

若字符被分类为数字则返回 true ，否则返回 false 。

### 可能的实现

    template< class charT >
    bool isdigit( charT ch, const std::locale& loc ) {
        return std::use_facet<std::ctype<charT>>(loc).is(std::ctype_base::digit, ch);
    }

### 示例

    #include <iostream>
    #include <locale>
    #include <string>
    #include <set>

    struct jdigit_ctype : std::ctype<wchar_t>
    {
        std::set<wchar_t> jdigits{L'一',L'二',L'三',L'四',L'五',L'六',L'七',L'八',L'九',L'十'};
        bool do_is(mask m, char_type c) const {
            if ((m & digit) && jdigits.count(c))
                return true; // 中文数字将被分类为数字
            return ctype::do_is(m, c); // 将剩下的留给亲类
        }
    };

    int main()
    {

        std::wstring text = L"123一二三１２３";
        std::locale loc(std::locale(""), new jdigit_ctype);

        std::locale::global(std::locale(""));
        std::wcout.imbue(std::locale());

        for(wchar_t c : text)
            if(std::isdigit(c, loc))
                std::wcout << c << " is a digit\n";
            else
                std::wcout << c << " is NOT a digit\n";
    }

输出：

    1 is a digit
    2 is a digit
    3 is a digit
    一 is a digit
    二 is a digit
    三 is a digit
    １ is NOT a digit
    ２ is NOT a digit
    ３ is NOT a digit

### 参阅

isdigit | 检查字符是否为数字 (函数)
iswdigit | 检查宽字符是否为数字 (函数)