gpt4 book ai didi

c++ - 编译时查询一个char是否为数字

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:11 25 4
gpt4 key购买 nike

我想在编译时检查给定的字符是否为数字。特别是我需要实现以下函数原型(prototype):

template<char c>
constexpr bool IsDigit();

澄清一下:我不必使用自定义实现。如果 std 中已经有内置方法,我会更喜欢该方法。

最佳答案

这应该适用于 ASCII:

constexpr bool IsDigit(char c) { return c >= '0' && c <= '9'; }  // ASCII only

如果您需要保留原型(prototype):

template<char C>
constexpr bool IsDigit() { return C >= '0' && C <= '9'; } // ASCII only

对于 wchar_t 支持,您可以尝试类似的方法:

constexpr bool IsDigit(wchar_t c)
{
return (c >= L'0' && c <= L'9') ||
(c >= L'\u0660' && c <= L'\u0669') || // Arabic-Indic
(c >= L'\u06F0' && c <= L'\u06F9') || // Extended Arabic-Indic
(c >= L'\u07C0' && c <= L'\u07C9') || // NKO
(c >= L'\u0966' && c <= L'\u096F') || // Devanagari
(c >= L'\u09E6' && c <= L'\u09EF') || // Bengali
(c >= L'\u0A66' && c <= L'\u0A6F') || // Gurmukhi
(c >= L'\u0AE6' && c <= L'\u0AEF') || // Gujarati
(c >= L'\u0B66' && c <= L'\u0B6F') || // Oriya
(c >= L'\u0BE6' && c <= L'\u0BEF') || // Tamil
(c >= L'\u0C66' && c <= L'\u0C6F') || // Telugu
(c >= L'\u0CE6' && c <= L'\u0CEF') || // Kannada
(c >= L'\u0D66' && c <= L'\u0D6F') || // Malayalam
(c >= L'\u0E50' && c <= L'\u0E59') || // Thai
(c >= L'\u0ED0' && c <= L'\u0ED9') || // Lao
(c >= L'\u0F20' && c <= L'\u0F29'); // Tibetan

// Missing check for Myanmar, Khmer, Mongolian, Limbu, New Tai Lue,
// Tai Tham Hora, Tai Tham Tham, Balinese, Sundanese, Lepcha, Ol Chiki,
// Vai, Surashtra, Kayah, Javanese, Cham, Meetei Mayek, Osmanya, Brahmi,
// Sora, Chakma, Sharada, Takri, Mathematical.
// For codes see http://www.unicode.org/ucd/
}

关于c++ - 编译时查询一个char是否为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22882193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com