2013-05-08 45 views

回答

2

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>;/ 
+0

嗯,是的,你是對的。我忘記了關於wchar_t的iswalpha()。我使用它們。 – dmigous 2013-05-08 09:27:24

+0

你應該在這種情況下使用'isspace' /'iswspace'作爲額外的測試 – Petesh 2013-05-08 09:29:23

+0

iswspace與輸入'e'符號將返回true?我需要過濾除當前語言環境的字母符號以外的其他字符 – dmigous 2013-05-08 09:33:59

相關問題