std::isalnum
出自cppreference.com
| 在標頭 <cctype> 定義
|
||
| |
||
檢查給定字符是否被當前 C 本地環境分類為字母數字字符。默認本地環境中,下列字符為字母數字:
- 數字(
0123456789) - 大寫字母(
ABCDEFGHIJKLMNOPQRSTUVWXYZ) - 小寫字母(
abcdefghijklmnopqrstuvwxyz)
若 ch 的值不能表示為 unsigned char 且不等於 EOF 則行為未定義。
參數
| ch | - | 要分類的字符 |
返回值
若字符為字母數字字符,則為非零值,否則為 0。
註解
同所有其他來自 <cctype> 的函數,若實參值既不能表示為 unsigned char 又不等於 EOF 則 std::isalnum 的行為未定義。為了以單純的 char(或 signed char)安全使用此函數,首先要將實參轉換為 unsigned char:
bool my_isalnum(char ch)
{
return std::isalnum(static_cast<unsigned char>(ch));
}
類似地,迭代器的值類型為 char 或 signed char 時,不應直接將它們用於標準算法。而是要首先轉換值為 unsigned char:
int count_alnums(const std::string& s)
{
return std::count_if(s.begin(), s.end(),
// static_cast<int(*)(int)>(std::isalnum) // 错误
// [](int c){ return std::isalnum(c); } // 错误
// [](char c){ return std::isalnum(c); } // 错误
[](unsigned char c){ return std::isalnum(c); } // 正确
);
}
示例
演示以不同本地環境(OS 限定)使用 std::isalnum。
運行此代碼
#include <cctype>
#include <clocale>
#include <iostream>
int main()
{
unsigned char c = '\xdf'; // ISO-8859-1 中的德文字母 ß
std::cout << "isalnum(\'\\xdf\', 默认 C 本地环境) 返回 "
<< std::boolalpha << (bool)std::isalnum(c) << '\n';
if(std::setlocale(LC_ALL, "de_DE.iso88591"))
std::cout << "isalnum(\'\\xdf\', ISO-8859-1 本地环境) 返回 "
<< std::boolalpha << (bool)std::isalnum(c) << '\n';
}
可能的輸出:
isalnum('\xdf', 默认 C 本地环境) 返回 false
isalnum('\xdf', ISO-8859-1 本地环境) 返回 true
參閱
| 檢查字符是否被本地環境分類為字母或數字 (函數模板) | |
| 檢查寬字符是否為字母數字 (函數) | |
isalnum 的 C 文檔
| |
| ASCII 值 | 字符 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 十進制 | 十六進制 | 八進制 | |||||||||||||
| 0–8 | \x0–\x8
|
\0–\10
|
控制碼 (NUL 等)
|
≠0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
| 9 | \x9
|
\11
|
制表 (\t)
|
≠0
|
0
|
≠0
|
≠0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
| 10–13 | \xA–\xD
|
\12–\15
|
空白符 (\n, \v, \f, \r)
|
≠0
|
0
|
≠0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
| 14–31 | \xE–\x1F
|
\16–\37
|
控制碼 | ≠0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
| 32 | \x20
|
\40
|
space | 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
|
GHIJKLMNOPQRSTUVWXYZ
|
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
|
ghijklmnopqrstuvwxyz
|
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
|
退格字符 (DEL)
|
≠0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|