Utf8和Unicode转换问题 C语言 千字文问题
来源:互联网 发布:文字特效制作软件 编辑:程序博客网 时间:2024/06/08 17:01
Utf8和Unicode转换问题
千字文
请编写一个程序,从输入中读取一篇中文文章,并统计出该文章中 ASCII 字符以外的重复出现的每一个字重复出现的次数。
文章使用 UTF-8 编码,可能会出现任何可以用 UTF-8 编码表示的字符(不限于中文)。
文章中所有的字符在 UCS-2 能够表示的范围内,即字符的 Unicode 值用两个字节就可以表示。
输入
一篇文章,总字数不限、每行字符数不限。每个字重复出现的次数不超过 60000 次。
输出
按照 Unicode 编码从小到大的顺序,输出文章中 ASCII (0~127) 字符以外的每一个重复出现过的字重复出现的次数。每行包含三项内容,首先是重复的字符(以 UTF-8 编码输出),然后是该字符的 Unicode 编码值(十六进制输出,字母均使用小写,长度不足4位数的用0补齐),最后输出该字符的重复次数。
如果文章中没有出现重复的字,则输出“No repeat!”。
思路:
1、首先,把utf-8转换为unicode:
读入一个字符进来,转换为二进制判断从左边第一位开始其连续1的个数,有几个就是几字节
如果是1,则是1字节数,即为ASCII码数,跳过
如果是2,则是2字节数,则还需读入一个字符。
二字节的格式:
110xxxxx 10xxxxxx(第一个字节中的前三位固定,第二个字节中的前两位固定,将前面的xxxxx拼接上后面的xxxxxx即为改汉字的Unicode表示)
可以让第一个字节char1 与上 0x001f右移6位,char2 与上0x003f,两者相加即可
如果是3,则是3字节数,则还需读入两个字符。
三字节的格式:
1110xxxx 10xxxxxx 10xxxxxx(第一个字节中的前四位固定,第二、三个字节中的前两位固定,将前面的xxxx拼接上后面的xxxxxx 再拼接上 xxxxxx即为改汉字的Unicode表示)
可以让第一个字节char1 与上 0x000f左移6位,char2 与上0x003f左移6位,char3与上0x003f三者相加即可
2、做一个hash表记录文章中该Unicode的数目
3、一个结构体(比如utf8)记录该unicode码(比如ucode)代表的utf8[ucode]的第一个,第二,第三个字节。以及该unicode码用有的字节数utf8[ucode].byteNum;
4、从0到65535循环判断如果为2字节,3字节则输出
5、如果没有重复则输出no repeat!
- Utf8和Unicode转换问题 C语言 千字文问题
- C语言实现Unicode和UTF8之间的转换
- c语言下的gb2312和utf8及unicode之间的互相转换
- [C语言]字符串处理 - ANSI - Unicode - UTF8 转换
- [C/C++]_[utf8和unicode的相互转换]
- Android的字符编码转换问题,Unicode,GB2312,UTF8等
- Android的字符编码转换问题,Unicode,GB2312,UTF8等
- (c语言)gb2312和utf8转换
- unicode 和 ansi转换问题
- UTF8编码转Unicode编码(C语言)
- UTF8编码转Unicode编码(C语言)
- ANSI、UNICODE和UTF8之间字符转换
- unicode和utf8编码的互相转换
- Vc下unicode和UTF8相互转换
- Unicode和UTF8之间的转换
- UTF8和Unicode关系及转换
- Vc下unicode和UTF8相互转换
- 不依赖任何系统API,用c语言实现gbk/utf8/unicode编码转换
- c++ explicit
- JAVA中调用C语言接口
- form表单的两种提交方式,submit和button的用法
- 挑战密室,第八届河南省省赛,郑大OJ10406
- Android 通过JitPack让自己开源库可以被别人引用
- Utf8和Unicode转换问题 C语言 千字文问题
- Maven常用命令
- Logger日志级别说明及设置方法、说明
- 深度学习 16. 反向传递算法最简单的理解与提高,BP算法,Backpropagation, 自己的心得。
- PHP判断是不是https协议
- vitrualbox安装后centos后的网络配置(host-only)
- 面试题(十)
- footer随能容高度,固定到底部Sticky footers
- 用命令形式从Windows系统拷贝文件到Linux