1#include <string.h> 2#include <wctype.h> 3 4#define WCTYPE_ALNUM 1 5#define WCTYPE_ALPHA 2 6#define WCTYPE_BLANK 3 7#define WCTYPE_CNTRL 4 8#define WCTYPE_DIGIT 5 9#define WCTYPE_GRAPH 6 10#define WCTYPE_LOWER 7 11#define WCTYPE_PRINT 8 12#define WCTYPE_PUNCT 9 13#define WCTYPE_SPACE 10 14#define WCTYPE_UPPER 11 15#define WCTYPE_XDIGIT 12 16 17int iswctype(wint_t wc, wctype_t type) { 18 switch (type) { 19 case WCTYPE_ALNUM: 20 return iswalnum(wc); 21 case WCTYPE_ALPHA: 22 return iswalpha(wc); 23 case WCTYPE_BLANK: 24 return iswblank(wc); 25 case WCTYPE_CNTRL: 26 return iswcntrl(wc); 27 case WCTYPE_DIGIT: 28 return iswdigit(wc); 29 case WCTYPE_GRAPH: 30 return iswgraph(wc); 31 case WCTYPE_LOWER: 32 return iswlower(wc); 33 case WCTYPE_PRINT: 34 return iswprint(wc); 35 case WCTYPE_PUNCT: 36 return iswpunct(wc); 37 case WCTYPE_SPACE: 38 return iswspace(wc); 39 case WCTYPE_UPPER: 40 return iswupper(wc); 41 case WCTYPE_XDIGIT: 42 return iswxdigit(wc); 43 } 44 return 0; 45} 46 47wctype_t wctype(const char* s) { 48 int i; 49 const char* p; 50 /* order must match! */ 51 static const char names[] = "alnum\0" 52 "alpha\0" 53 "blank\0" 54 "cntrl\0" 55 "digit\0" 56 "graph\0" 57 "lower\0" 58 "print\0" 59 "punct\0" 60 "space\0" 61 "upper\0" 62 "xdigit"; 63 for (i = 1, p = names; *p; i++, p += 6) 64 if (*s == *p && !strcmp(s, p)) 65 return i; 66 return 0; 67} 68