VC下怎么判断一个字符串里有多少个字符的实现

VC下如何判断一个字符串里有多少个字符的实现
VC下如何判断一个字符串里有多少个字符的实现,不使用strlen类似的可以直接得出结果的API,而是想知道这个函数内部是如何实现的,UNICODE下就不用讨论了,只想知道strlen是如何做到的,英文和数字,还有其它自然语言,还包括如何处理UTF8和ANSI编码的问题,,哪位大牛可否透露一点关于英文和数字编码方面的规律,保证我在遍历一个ANSI或UTF8编码的BUFFER时,能一次定位到一个字符的首字节!!!100大粉献上,,VC下怎么判断一个字符串里有多少个字符的实现
------解决思路----------------------
Character Classification
Each of these routines tests a specified single-byte character, wide character, or multibyte character for satisfaction of a condition. (By definition, the ASCII character set is a subset of all multibyte-character sets. For example, Japanese katakana includes ASCII as well as non-ASCII characters.) Generally these routines execute faster than tests you might write. For example, the following code executes slower than a call to isalpha(c):

if ((c >= 'A') && (c <= 'Z')) 
------解决思路----------------------
 ((c >= 'a') && (c <= 'z'))
    return TRUE;

Character-Classification Routines

Routine Character Test Condition 
isalnum, iswalnum, _ismbcalnum Alphanumeric 
isalpha, iswalpha, _ismbcalpha Alphabetic 
__isascii, iswascii ASCII 
iscntrl, iswcntrl Control 
__iscsym Letter, underscore, or digit 
__iscsymf Letter or underscore 
isdigit, iswdigit, _ismbcdigit Decimal digit 
isgraph, iswgraph, _ismbcgraph Printable other than space 
islower, iswlower, _ismbclower Lowercase 
_ismbchira Hiragana 
_ismbckata Katakana 
_ismbclegal Legal multibyte character 
_ismbcl0 Japan-level 0 multibyte character 
_ismbcl1 Japan-level 1 multibyte character 
_ismbcl2 Japan-level 2 multibyte character 
_ismbcsymbol Non-alphanumeric multibyte character 
isprint, iswprint, _ismbcprint Printable 
ispunct, iswpunct, _ismbcpunct Punctuation 
isspace, iswspace, _ismbcspace White-space 
isupper, iswupper, _ismbcupper Uppercase 
iswctype Property specified by desc argument 
isxdigit, iswxdigit Hexadecimal digit 
mblen Return length of valid multibyte character; result depends on LC_CTYPE category setting of current locale 

// UTF-8 编码字符理论上可以最多到 6个字节长,但目前全世界的所
// 有文字和符号种类加起来也只要编到 4个字节长就够了。
//   UTF-8 是以 8位(即 1个字节)为单元对原始码进行编码(注意一
// 点:这里所讲的原始码都是指Unicode码),并规定:多字节码(2个字
// 节以上才称为多字节)以转换后第1个字节起头的连续“1”的数目(这
// 些连续“1”称为标记位),表示转换成几个字节:“110”连续两个
// “1”,表示转换结果为2个字节,“1110”表示3个字节,而“11110”
// 则表示4个字节……跟随在标记位之后的“0”,其作用是分隔标记位和
// 字符码位。第2~第4个字节的起头两个位固定设置为“10”,也作为标
// 记,剩下的6个位才做为字符码位使用。
//   这样,2字节UTF-8码剩下11个字符码位,可用以转换0080~07FF的
// 原始字符码,3字节剩下16个字符码位,可用以转换0800~FFFF的原始字
// 符码,由此类推。编码方式的模板如下:
//
// 原始码(16进制) UTF-8编码(二进制)
// --------------------------------------------
// 0000 - 007F       0xxxxxxx
// 0080 - 07FF       110xxxxx 10xxxxxx
// 0800 - FFFF       1110xxxx 10xxxxxx 10xxxxxx
// ……
// --------------------------------------------
//
//   模板中的“x”表示字符码。
//   Ascii码<007F,编为1个
// 字节的UTF-8码。汉字的 Unicode编码范围为0800-FFFF,所以被编为
// 3个字节的UTF-8码。
//   例如“汉”字的Unicode编码是6C49,6C49在0800-FFFF之间,所以
// 要用3个字节的模板:1110wwww 10xxxxyy 10yyzzzz。

//    6    C    4    9
// 0110 1100 0100 1001
// wwww xxxx yyyy zzzz
//     wwww   xxxxyy   yyzzzz
// 1110wwww 10xxxxyy 10yyzzzz。
// 11100110 10110001 10001001
//    E   6    B   1    8   9
//“汉”字的UTF-8编码是E6 B1 89

------解决思路----------------------
楼主还是没有足够仔细地看我上面的回帖。
   //GBK汉字内码范围(不包括A1xx~A9xx的标点符号英文字母特殊符号等)
   //区码  ,位码
   //81-A0 ,40-7E 80-FE
   //AA-AF ,40-7E 80-A0
   //B0-D6 ,40-7E 80-FE
   //D7    ,40-7E 80-F9
   //D8-F7 ,40-7E 80-FE
   //F8-FE ,40-7E 80-A0
再供参考:
int isaschz(char *s,int i) {//返回:0asc
------解决思路----------------------
1hzq
------解决思路----------------------
2hzw
    static char *ls=NULL;
    static int i1;