首页 > 代码库 > 1407291646-hd-汉字统计.cpp
1407291646-hd-汉字统计.cpp
/*汉字机内码在计算机的表达方式的描述是,使用二个字节,每个字节最高位一位为1。
计算机中, 补码第一位是符号位, 1 表示为 负数,
所以 汉字机内码的每个字节表示的十进制数都是负数
所以统计输入字符串含有几个汉字,
只需求出字符串中小于0的字符有几个,将它除以2就得到答案 */
#include<stdio.h>
#include<string.h>
char s[1005000];
int hanzi(char a)
{
if(~(a>>8)==0)
// ~ 按位取反 ,就是使每一位上的 0变 1,1变 0;
// >> 右移运算符,右边的整形表达式指定移动的位数
return 1;
else
return 0;
}
int main()
{
int n;
int i,len,num;
scanf("%d",&n);
getchar();
while(n--)
{
gets(s);
len=strlen(s);
num=0;
for(i=0;i<len;i++)
if(hanzi(s[i]))
num++;
printf("%d\n",num/2);
}
return 0;
}
计算机中, 补码第一位是符号位, 1 表示为 负数,
所以 汉字机内码的每个字节表示的十进制数都是负数
所以统计输入字符串含有几个汉字,
只需求出字符串中小于0的字符有几个,将它除以2就得到答案 */
#include<stdio.h>
#include<string.h>
char s[1005000];
int hanzi(char a)
{
if(~(a>>8)==0)
// ~ 按位取反 ,就是使每一位上的 0变 1,1变 0;
// >> 右移运算符,右边的整形表达式指定移动的位数
return 1;
else
return 0;
}
int main()
{
int n;
int i,len,num;
scanf("%d",&n);
getchar();
while(n--)
{
gets(s);
len=strlen(s);
num=0;
for(i=0;i<len;i++)
if(hanzi(s[i]))
num++;
printf("%d\n",num/2);
}
return 0;
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。