读入汉字,从文件或者标准输入读,每次读一个字节,依次存入数组
如果可以确定是全部汉字,那么可以一次读入两个字节
结束符可以用\0,但是由于双字节汉字编码低位可能是0 所以结束符要用双\0
针对英文字符和汉字混合的情况,可以这样判断
每次读入一个字符,如果该字符大于0x80 则这是一个汉字的高位,继续读入并存储
如果该字符小于0x80 则这是一个英文字符,直接存储
do
read one byte
check
if >0x80 read next
save
while(!end)
大致这样
直到读入约定的end标志,可以是\n 可以是eof
第一题:#includeintmain(intargc,char**argv){char*in="in.txt"char*out="out.txt"FILE*fpin,*fpoutintarr[50]={0}charchintnum=0fpin=fopen(in,"rb")if(!fpin){printf("Unabletoopen'%s'.\n",in)return1}while((ch=fgetc(fpin))!=EOF){if(ch==''||ch=='\n'){if(num<=50){arr[num]+=1}num=0continue}num=num*10+(ch-'0')}fclose(fpin)fpout=fopen(out,"wb")if(!fpout){printf("Unabletoopen'%s'.\n",out)return1}for(num=0num<50++num)fprintf(fpout,"NU.:%dtimes:%d\n",num,arr[num])fclose(fpout)return0}可以得到汉字的每个字节的ASCII码(内码)值,也可以得到它们的区位码:
#include<stdio.h>
int main()
{unsigned char s[11] int i,a,b
printf("请输入姓名:")
gets(s)
printf("汉字\tASCII码\t\t内码\t区位码\n")
for(i=0s[i]i+=2)
{ a=s[i] b=s[i+1]
printf(" %c%c :\t%d %d\t\t%X%X\t%d",a,b,a,b,a,b,a-160)
if(b<170)printf("0%d\n",b-160)
else printf("%d\n",b-160)
}
system("pause")
return 0
}