| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 576 人关注过本帖
标题:C语言字符串问题
只看楼主 加入收藏
童小林
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-11-28
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:5 
C语言字符串问题
我不是学C的。但是最近公司安排个任务我不得不做。请各位大牛帮助啊:就是给你一个字符串,你要分辨出非汉字和汉字,而且要找到非汉字的位置,然后吧非汉字删除只留汉字。请大牛给我代码谢谢啊
搜索更多相关主题的帖子: 字符串 C语言 汉字 而且 
2013-11-28 15:32
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
首先,得知道这个字符串的编码。比如 big5、gb2313、GBK、gb18030、UTF-7、UTF-8、UTF-16、UTF-32 等等等等,有的还要区分big-endian和little-endian

其次,知道编码后,还得知道在这个编码中,哪些属于汉字。对于某些编码简单,就是数个范围;而对于某些编码---比如unicode---来讲,中日韩越这四个汉文字圈中相近的字在unicode中共用,难办呀。

所以,如果你没有足够的人力和物力,干这种毫无用处的事儿图个啥?

最后,我猜出题者是个外行,它只是想让你将multibyte characters中属于asc范围内的字符剔除,这就简单了。
唯一要注意的是C/C++标准中并没有规定char是signed还是unsigned(你用<0呢,还是用>127),同时又规定对signed的符号位进行位运算是未定义行为。
当然了,如果我猜测的是对的,那么出题者肯定不懂这些所以不在乎。
2013-11-28 16:01
pink_duo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:209
专家分:1054
注 册:2013-11-5
收藏
得分:5 
首先你得搞清楚,汉字和非汉字的差别,前者在GB18030编码占4字节或2字节,非汉字占1字节,非汉字的编码区间在0x00-0x7f,其中包含了命令和可打印字符。
先把采用什么汉字编码搞清楚,不然有些汉字编码是自定义区间,显示为空

埋头做牛,抬头做人,低头做狗
2013-11-28 16:04
pink_duo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:209
专家分:1054
注 册:2013-11-5
收藏
得分:0 
当然我指的是GB类的汉字编码,不包括unicode

埋头做牛,抬头做人,低头做狗
2013-11-28 16:06
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
楼主的题目是无法完成的,我随便写个,说不定你那外行上司要的就是这玩意儿
程序代码:
#include <stdio.h>

int main()
{
    char s[] = "this这 is是 a一个 test测试 .。";

    for( char *p1=s,*p2=s; *p1<=0||*p1>127?*p2++=*p1:0, *p1!='\0'; ++p1 );

    puts( s );
   

    return 0;
}

2013-11-28 16:17
kajj_0321
Rank: 2
等 级:论坛游民
帖 子:47
专家分:93
注 册:2013-10-23
收藏
得分:5 
回复 5楼 rjsp
nb

kajj->1314 努力每一天。
2013-11-28 16:22
快速回复:C语言字符串问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020085 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved