是否有可能做的setlocale(LC_CTYPE,「ru_RU.utf8」)和字符串「рус工程」做isaplha()檢查並獲得儘可能結果下面的每個符號:現在,當我我可以使用setlocale()和isalpha()來確定字符是否屬於當前語言環境的字母表嗎?
р alpha у alpha с alpha not alpha e not alpha n not alpha g not alpha
設置本地化ru_RU.utf8除了空間符號的所有符號被阿爾法
是否有可能做的setlocale(LC_CTYPE,「ru_RU.utf8」)和字符串「рус工程」做isaplha()檢查並獲得儘可能結果下面的每個符號:現在,當我我可以使用setlocale()和isalpha()來確定字符是否屬於當前語言環境的字母表嗎?
р alpha у alpha с alpha not alpha e not alpha n not alpha g not alpha
設置本地化ru_RU.utf8除了空間符號的所有符號被阿爾法
isalpha
的函數詢問the question:
的因而isalpha()函數將試驗C是否是類α的程序的當前區域的字符。
並繼續指出:
的C參數是一個int,它的應用應確保可表示爲unsigned char或等於宏EOF的值的值。如果參數有任何其他值,則行爲是未定義的。
這意味着它只適用於ascii字符。
測試幾乎是[A-Z]
或[a-z]
範圍內的字符,僅此而已。
Noe如果要測試此範圍之外的字符,則需要使用其中一個寬字符變體,如iswalpha。
它看起來像你問的是,如果你可以執行一個測試,將拒絕不明確的西裏爾字母字符?這不適用於iswalpha()
測試,因爲它假定全部幾乎所有字符集中的字母字符都是字母字符 - 如果您閱讀ru_RU(glibc源碼localedata/locales/ru_RU
)的區域設置定義,該文件使用i18n
文件作爲其數據源字符類型決定了什麼被認爲是一個字母。
如果輸入數據確實只有from the russian alphabet,那麼您可以檢查該字符是否爲非ascii,如果是這種情況,則將其作爲有效字符接受;不幸的是,很有可能某些字符是鍵入的,例如е
(即CYRILLIC SMALL LETTER IE Unicode:U + 0435,UTF-8:D0 B5)將使用拉丁字符e
(即LATIN小字母E Unicode:U + 0065,UTF-8:65)輸入,錯過了這個測試。
,如果你想測試這些西里爾字符明確,那麼你需要測試的字符範圍:
% CYRILLIC/
<U0400>..<U042F>;<U0460>..(2)..<U047E>;/
<U0480>;<U048A>..(2)..<U04BE>;<U04C0>;<U04C1>..(2)..<U04CD>;/
<U04D0>..(2)..<U04FE>;/
% CYRILLIC SUPPLEMENT/
<U0500>..(2)..<U0522>;/
% CYRILLIC SUPPLEMENT 2/
<UA640>..(2)..<UA65E>;<UA662>..(2)..<UA66C>;<UA680>..(2)..<UA696>;/
% CYRILLIC/
<U0430>..<U045F>;<U0461>..(2)..<U047F>;/
<U0481>;<U048B>..(2)..<U04BF>;<U04C2>..(2)..<U04CE>;/
<U04CF>;/
<U04D1>..(2)..<U0523>;/
% CYRILLIC SUPPLEMENT 2/
<UA641>..(2)..<UA65F>;<UA663>..(2)..<UA66D>;<UA681>..(2)..<UA697>;/
嗯,是的,你是對的。我忘記了關於wchar_t的iswalpha()。我使用它們。 – dmigous 2013-05-08 09:27:24
你應該在這種情況下使用'isspace' /'iswspace'作爲額外的測試 – Petesh 2013-05-08 09:29:23
iswspace與輸入'e'符號將返回true?我需要過濾除當前語言環境的字母符號以外的其他字符 – dmigous 2013-05-08 09:33:59