随笔-2  评论-5  文章-0  trackbacks-0

近日开发中遇到半角与全角转换的问题,当时想了很多方法来实现可是总不近人意,最终用了最简单的数组方式来实现(人笨没办法),大家如果有更好的方法可以贴出来哈。

源码如下:

#define ZEN_MAX_LEN    2056

int FormatKaToZen(char* pDestination ,char* pSource)
{
    char *pTempDest   = pDestination;
    char *pTempSource = pSource;
    char* pTemp = NULL;
    int iTemp = 0;
    char szDestination[ZEN_MAX_LEN] = "";
    char szZen[3] = "";
 
    char szHan[256][3] = {{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},
       {""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},
       {" "},{"!"},{"”"},{"#"},{"$"},{"%"},{"&"},{"’"},{"("},{")"},{"*"},{"+"},{"、"},{"-"},{"."},{"/"},
       {"0"},{"1"},{"2"},{"3"},{"4"},{"5"},{"6"},{"7"},{"8"},{"9"},{":"},{";"},{"<"},{"="},{">"},{"?"},
       {"@"},{"A"},{"B"},{"C"},{"D"},{"E"},{"F"},{"G"},{"H"},{"I"},{"J"},{"K"},{"L"},{"M"},{"N"},{"O"},
       {"P"},{"Q"},{"R"},{"S"},{"T"},{"U"},{"V"},{"W"},{"X"},{"Y"},{"Z"},{"["},{"¥"},{"]"},{"^"},{"_"},
       {"’"},{"a"},{"b"},{"c"},{"d"},{"e"},{"f"},{"g"},{"h"},{"i"},{"j"},{"k"},{"l"},{"m"},{"n"},{"o"},
       {"p"},{"q"},{"r"},{"s"},{"t"},{"u"},{"v"},{"w"},{"x"},{"y"},{"z"},{"{"},{"|"},{"}"},{"~"},{""},
       {""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},
       {""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},
       {""},{"。"},{"「"},{"」"},{"、"},{"・"},{"ヲ"},{"ァ"},{"ィ"},{"ゥ"},{"ェ"},{"ォ"},{"ャ"},{"ュ"},{"ョ"},{"ッ"},
       {"ー"},{"ア"},{"イ"},{"ウ"},{"エ"},{"オ"},{"カ"},{"キ"},{"ク"},{"ケ"},{"コ"},{"サ"},{"シ"},{"ス"},{"セ"},{"ソ"},
       {"タ"},{"チ"},{"ツ"},{"テ"},{"ト"},{"ナ"},{"ニ"},{"ヌ"},{"ネ"},{"ノ"},{"ハ"},{"ヒ"},{"フ"},{"ヘ"},{"ホ"},{"マ"},
       {"ミ"},{"ム"},{"メ"},{"モ"},{"ヤ"},{"ユ"},{"ヨ"},{"ラ"},{"リ"},{"ル"},{"レ"},{"ロ"},{"ワ"},{"ン"},{"″"},{"°"},
       {""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},
       {""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""},{""}};

 for(pTempSource;*pTempSource!='\0';*pTempSource++) 
 {
     iTemp = (int)*pTempSource;
     if(iTemp >= 32 && iTemp <= 126)
     {
         strncpy(szZen,szHan[iTemp],3);
         strcat(szDestination,szZen);
         continue;
     }
     else if(iTemp >= -95 && iTemp <= -33)
     {
         iTemp = iTemp + 256;
         strncpy(szZen,szHan[iTemp],3);
         strcat(szDestination,szZen);
         continue;  
     }
     else
     {
         strncat(szDestination,pTempSource,2);
         pTempSource++;
         continue;
     }

 }

 strcpy(pDestination, szDestination);

 return 0;
}

posted on 2007-09-20 13:46 云翼 阅读(1486) 评论(5)  编辑 收藏 引用 所属分类: 算法

评论:
# re: 日文系统全角转换 2007-09-20 15:26 | Minidx全文检索
取其内码减一下就可以了啊。  回复  更多评论
  
# re: 日文系统全角转换 2007-09-20 15:32 | zsenj
我减过了,某些字符减数的值不是固定的。郁闷了一段时间。  回复  更多评论
  
# re: 日文系统全角转换 2007-09-20 16:02 | Minidx全文检索
看你的数组,应该是不需要考虑Unicode等其他编码替换的情况,那应该可以的啊。
switch case分几个分支处理就可以了.不管处理速度/效率,代码可读性等方面肯定要比数组要好得  回复  更多评论
  
# re: 日文系统全角转换 2009-04-19 10:11 | 小凡
小凡  回复  更多评论
  
# re: 日文系统全角转换 2011-06-30 16:29 | 邢佳伟
超梦  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理