首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

,大姐们帮忙看看这几道题

2012-10-29 
求助,各位大哥大姐们帮忙看看这几道题1、请编写一个程序,从输入中读取一篇中文文章,并统计出该文章中 ASCII

求助,各位大哥大姐们帮忙看看这几道题
1、请编写一个程序,从输入中读取一篇中文文章,并统计出该文章中 ASCII 字符以外的重复出现的每一个字重复出现的次数。

文章使用 UTF-8 编码,可能会出现任何可以用 UTF-8 编码表示的字符(不限于中文)。

文章中所有的字符在 UCS-2 能够表示的范围内,即字符的 Unicode 值用两个字节就可以表示。

输入
一篇文章,总字数不限、每行字符数不限。每个字重复出现的次数不超过 60000 次。

输出
按照 Unicode 编码从小到大的顺序,输出文章中 ASCII 字符以外的每一个重复出现过的字重复出现的次数。每行一个,首先输出该字符(以 UTF-8 编码),然后输出一个空格和该字符的出现的次数。

如果文章中没有出现重复的字,则输出“No repeat!”。

注意
输入中可能出现错误的字符,在处理时请忽略这些字符,并在出现这种情况时输入错误字符的个数,如:“Illegal character count: 8”。

2、据说,如果有无穷多的母牛和无穷多的大型键盘,它们就可以创造出世界上最伟大的回文。在寻找回文时,可以不计文中的标点、空白和大小写,只要关注 26 个英文字母就可以了。但是要注意,在输出时要按照原样,也就是要保留原有的空白、标点和大小写。

你的任务,就是在不超过 20000 个字符的字符串中,寻找长度不超过 2000 的回文字符串(含空格和标点时)。

输入格式
一段文本,不超过 20000 个字符,可以有一行或多行,每行的长度不超过 80 个字符。

输出格式
输出的第一行为找到的最长的回文字符串的长度。后面的行应该包括该字符串,字符串两边多余的空格和标点都不需要输出,但字符串中的空格、标点和换行则需要按照原样输出。

如果文中有多个长度相同的回文字符串,只要输出第一个就可以了。

[解决办法]
第一题
1、首先要理解utf-8的编码规则。
2、在读入数据时使用fread,每次读入4096字节,按utf-8的规则解析,可以很容易区分出ascii和非ascii字符。
3、把非ascii字符转换成unicode字符,这样用两个字符可以表示,建立一个65536长度的数组即可以表示所有的字符,数组里放对应的字符出现的次数。由于最大次数不超过60000次,用short类型即可。
4、输出时直接遍历数组即可,注意跳过前面127个属于ascii字符范围的值即可。
[解决办法]
第二题有点思路
从原串中不停的取字符串(利用下标移动,在原串中操作),从最长的开始判断是否是回文
是则输出

C/C++ code
例如:原串为xabbay取原串       xabbay(x != y不是回文)长度减1     xabba(x != a不是回文)            abbay(a != y不是回文)长度减2      xabb(x != b不是回文)            abba(是回文结束并输出)            bbay(不是回文,这步不必写,为说明取字符串的步骤才写的) 

热点排行