| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5327 人关注过本帖
标题:求大神 C语言代码中全角半角空格的判断方法
只看楼主 加入收藏
闫洪恩
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-9-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
求大神 C语言代码中全角半角空格的判断方法
在读取文件中,如果出现全角空格字符,则打印文件格式错误,但不知道怎么去在C代码中区分全、半角空格字符,求思路,请大神们多多指教!跪谢。。。
搜索更多相关主题的帖子: C语言 
2013-09-26 09:43
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:20 
将字符转换成unicode编码去判断。

♂ 死后定当长眠,生前何须久睡。♀
2013-09-26 10:04
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
另外,在windows中,中文和全角字符都占两个字节,并且使用了ASCII Chart 2 (codes 128–255)。可以凭这一点来一个个检测是否是中文和全角字符。实际上,全角字符的第一个字节总是被置为163,而第二个字节则是相同半角字符码加上128(不包括空格)。如半角A为65,则全角A则是163(第一个字节)、193(第二个字节,128+65)。而对于中文来讲,它的第一个字节被置为大于163
,(如\'阿\'为:176 162),可以在检测到中文时不进行转换。
给你个全角字符转换到半角字符的例子:
----------------------------------
# include <iostream>
using namespace std;
string Convert(const char*);
int main()
{
    const string strTmp="中国人,。";
    cout<<Convert(strTmp.c_str())<<endl;
    return 0;
}
string Convert(const char *cCharTmp)
{
    int nLength=strlen(cCharTmp);
    char *cTmp=new char[nLength+1];
    strcpy(cTmp,cCharTmp);
    string str="\0";
    unsigned char  c1,c2;
    int i;
    for (i=0; i<nLength; i++)
    {
        c1=cTmp[i];
        c2=cTmp[i+1];
        if (c1==163)//判断是否为全角字符
        {
            str=str+(char)(c2-128);
            i++;
            continue;
        }
        if (c1>163)//判断是否为文字
        {
            str=str+(char)c1;
            str=str+(char)c2;
            i++;
            continue;
        }
        if ((c1==161) && (c2==161))//全角空格是个特例,另加处理
        {
            str=str+"\0";
            i++;
            continue;
        }
        str=str+ (char)c1;
    }
    delete cTmp;
    cTmp=NULL;
    return str;
}
——————————————————————————————
帖子居然被截断了,下半部显示不出来了,我重发一下。


[ 本帖最后由 303770957 于 2013-9-26 10:48 编辑 ]

♂ 死后定当长眠,生前何须久睡。♀
2013-09-26 10:28
闫洪恩
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-9-26
收藏
得分:0 
回复 3楼 303770957
感谢啊,真心帮大忙了,谢谢!!!
2013-09-26 12:10
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
帮大忙了还不赶紧结贴,还等什么呢?

♂ 死后定当长眠,生前何须久睡。♀
2013-09-26 13:43
闫洪恩
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-9-26
收藏
得分:0 
回复 5楼 303770957
把你手机号给我,有时间请你吃饭
2013-09-26 14:57
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
呵呵,我们两个相隔的有点远吧?请吃个饭的还不够报销车费呢。

♂ 死后定当长眠,生前何须久睡。♀
2013-09-26 15:08
快速回复:求大神 C语言代码中全角半角空格的判断方法
数据加载中...
 
   



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

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