欧卡2中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

需要三步,才能开始

只需两步,慢速开始

玩欧卡就用莱仕达V99方向盘欧卡2入门方向盘选莱仕达V9莱仕达折叠便携游戏方向盘支架欢迎地图Mod入驻
查看: 2575|回复: 0
收起左侧

数制编码-数字设计题

[复制链接]
script 发表于 2011-11-24 23:35 | 显示全部楼层 |阅读模式
2、试尝试用C语言写一个获取字符串长度的子函数,要求能自动识别字符串中的字符是单字节字符还是双字节字符。(提示:字符串可能是中英文混合字符串)
/* 
 * 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]="知易行难学生论坛,大学生交流平台!";
 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, 双字节:%d\n",len,d,s);
}
 
0x80表示16进制数80,转换为十进制为128,转换为二进制为:10000000
(*str)与0x80进行&(位与)运算
按照汉字的高位为1的说法,所有高位不为1的字符和二进制10000000进行&运算后的结果都为0,即不为中文字符,相反,只要高位为1的字符,(*str)&0x80的结果都是128(10000000)

联系我们|手机版|欧卡2中国 ( 湘ICP备11020288号-1 )

GMT+8, 2024-12-28 21:28 , Processed in 0.039559 second(s), 11 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表