做数字设计作业时遇到的问题:试尝试用C语言写一个获取字符串长度的子函数,要求能自动识别字符串中的字符是单字节字符还是双字节字符。(提示:字符串可能是中英文混合字符串)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
/* * File: main.cpp * Author: xuehaiyisu * * Created on 201年月日, : */#include<stdio.h> #include<stdlib.h>void strlength(unsigned char *str); int main() { unsigned char str[300]="ABC大学!"; strlength(str); system("pause"); }void strlength(unsigned char *str) { int len=0,d=0,s=0; while(*str) { if((*str)&0x80) //&是按位与运算 s++; else d++; len++; str++; } printf("字符串长度:%d, 其中单字节:%d, 双字节:%dn",len,d,s); } |
0x80表示16进制数80,转换为十进制为128,转换为二进制为:10000000
(*str)与0x80进行&(位与)运算
按照汉字的高位为1的说法,所有高位不为1的字符和二进制10000000进行&运算后的结果都为0,即不为中文字符,相反,只要高位为1的字符,(*str)&0x80的结果都是128(10000000)
发表回复