在 GBK 编码下,请编写一个截取字符串的函数, 输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,同时忽略字符串中的数字后输出最终结果。 给定样例:
输入:华 hua 4
输出:华 hu
以下是我的代码(通过 20%),周围没有发现完全过的。 https://pan.baidu.com/s/1FHWgcyJOZ3agPQBopduqJg
由于不清楚是否是先忽略数字再截取,还是先截取然后输出的时候忽略数字。我两种都有测试,但依旧过不了。想请教一下,我哪种情况没考虑?
1
jingous OP 还有一份通过率 40%的代码,但修改不见了。
|
2
l00t 2018-04-18 21:43:28 +08:00
你这代码里哪个地方体现了对 GBK 的处理?
|
3
jingous OP |
4
l00t 2018-04-18 22:02:58 +08:00
@jingous #3 GBK 两个字节,然后要求你不要截出半个来,所以你的处理就是看字符串去掉数字后的实际长度与输入的字节数的最小值是奇数还是偶数?
输入:hua 华 4 或者 输入:华 hua 5 请问输出是什么? |
5
l00t 2018-04-18 22:03:49 +08:00
V 站英文和汉字间会自动加空格,请忽略中间的空格。
|
6
jingous OP @l00t 题目模糊不清。我理解的是
输入:hua 华 4 输出:hua 输入:hua 华 5 输出:hua 华 因为是两个两个字节,并且每个字节都小于 0.所以,我判断,如果截取的字符串中小于 0 的符号是奇数个,说明汉字被截断了。 |
7
jingous OP @l00t 目前没有找到一个通过的代码,因此看是否是我漏掉了什么。我感觉是没有显示转换 gbk 的问题。但机试结束,没办法测试了
|
9
jingous OP @l00t 一个汉字的大小是两个字节,这两个值都是 1 开头的。只要判断字符串中有几个字符小于 0,就可以统计处字符串中的汉字个数
|
11
jingous OP @l00t 比如输入:华 1
该字符串长度为 2,其中每个字符都是<0。那么子字符串中小于 0 的字符有 1 歌(奇数),说明把汉字截断了。于是不再输出截断的汉字。最后结果输出为空。 |
12
zmj1316 2018-04-18 22:36:34 +08:00 via Android
和四舍五入类似,不截断是不是要求保留而不是去掉
|
13
katsusan 2018-04-18 22:56:29 +08:00 via iPhone
GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间。
> 第二个字节不一定小于 0 吧 |
15
UIXX 2018-04-19 08:57:19 +08:00
讲个个人思路,把字符串跟字节数组进行同字节数据比较可能更简单点
|
16
Zhuozhuo 2018-04-19 19:46:01 +08:00
可能也是有个隐藏的 case,有一个其他的汉字或者中文标点啥的
|