isalpha entspricht wchar_t

8

Was ist die äquivalente Funktion für isalpha oder isalnum mit wchar_t?

wctype?

ein Beispiel wäre auch schön

Danke

    
lj8888 31.07.2010, 13:43
quelle

6 Antworten

11

iswalpha , iswalnum . Gleiche Verwendung.

Docs - Windows (msdn)

Docs - Linux (opengroup.org)

Krevan 31.07.2010 13:47
quelle
3

Sie fügen Tag "Lokalisierung" in Ihre Frage ein. Im Falle des Schreibens einer internationalen Anmeldung sollten Sie definieren, was Sie unter alphabetischen oder numerischen Zeichen verstehen. Wenn Sie Programme für Windows schreiben, empfehle ich Ihnen, GetStringTypeEx function zu verwenden (siehe Ссылка ) ). Zum Beispiel der Code

%Vor%

Sie können auch CT_CTYPE3 oder CT_CTYPE2 verwenden, um zu bestimmen, ob ein Zeichen ein Ideographic oder eine europäische Nummer ist.

Um genauer zu sein, versuchen Sie einfach, die Funktionen iswalpha , IsCharAlphaW , iswalnum , iswdigit und GetStringTypeExW zu verwenden, um folgende Zeichen zu testen: L'a ', L'ü', L'á ' , L'я '(russischer Charackter), L' ノ '(japanischer Charackter in Katakana), L' 一 '(1 auf Japanisch). Du wirst das sehen

  • iswalpha (L 'ノ') gibt das Alpha zurück
  • IsCharAlphaW (L 'ノ') gibt NOT alpha
  • zurück
  • iswalnum (L '一') return alpha oder digit
  • iswdigit (L '一') gibt NOT digit
  • zurück

Der Code

%Vor%

sagen Sie, dass L "一" keine europäische Nummer ist. Sie können GetStringTypeExW verwenden, um eine europäische Nummer aus z. B. arabischer Nummer usw. zu bestimmen.

Ich empfehle Ihnen daher, Ihre Anforderung genauer zu spezifizieren und dann die API basierend auf den Anforderungen auszuwählen. Im Allgemeinen ist die Verwendung der C-API nicht der beste Weg für eine internationale Anwendung.

    
Oleg 01.08.2010 16:49
quelle
2

Sehen Sie sich std::isaplha<charT> von <locale> . Könnte das als std::isalpha<wchar_t> verwenden.

    
Dmitry 31.07.2010 13:58
quelle
1

Es hängt davon ab, wie Sie "äquivalent" definieren. Die C-Zeichenklassen sind im Vergleich zu Unicode-Zeichenklassen recht einfach. Wenn Sie beispielsweise testen möchten, ob ein gegebener Codepunkt normalerweise einen Buchstaben darstellt (für eine Definition von "Buchstabe"), könnten Sie nach der allgemeinen Kategorie L ; Wenn Sie überprüfen möchten, ob eine gegebene Zeichenfolge eine gültige ID enthält, können Sie UAX # 31 usw. verwenden. iswalnum und iswalpha können das beabsichtigte Ergebnis abhängig von der aktuellen "Gebietsschema" -Einstellung ergeben.

    
Philipp 01.08.2010 13:57
quelle
1

Streng genommen ist dies unter Visual Studio / Windows nicht möglich, weil wchar_t auf dieser Plattform 2 Byte groß ist und keinen Unicode-Codepunkt halten kann.

Was Sie wirklich brauchen, ist eine Funktion, die char * akzeptiert. Sie haben eine in ICU AFAIK.

Siehe auch Ссылка

    
Pavel Radzivilovsky 23.08.2010 09:10
quelle
0

Der Header ist <wctype.h> . Die grundlegenden Makro / Funktionsnamen haben ein 'w' in ihnen:

%Vor%

usw.

Es gibt auch die Funktionen:

%Vor%

Sie könnten zum Beispiel schreiben:

%Vor%

Oder Sie könnten einfach schreiben:

%Vor%     
Jonathan Leffler 31.07.2010 13:50
quelle

Tags und Links