C++中的半角、全角字符转换

全角字符占用2个字符位置,半角字符(Half-width characters)占用1个字符位置。他们在应用上的区别主要表现在输入阿拉伯数目字、英文字母、标点符号、特殊符号,这些只需要占1个字符位的一般用半角输入。如果用全角输入的话,每两个字符之间就会产生一个空格。

 

半角转全角

std::string ToFull(std::string str)
{
 std::string result = "";  
 unsigned char tmp; unsigned char tmp1;  
 for (unsigned int i = 0; i < str.length(); i++)
 {  
  tmp = str[i];  
  tmp1 = str[i + 1];  
  //cout << "uchar:" << (int) tmp << endl;  
  if (tmp>32 && tmp<128)
  {//是半角字符
   result += 163;//第一个字节设置为163
   result += (unsigned char)str[i]+128;//第二个字节+128;  
  }
  else if (tmp >= 163)
  {//是全角字符  
   result += str.substr(i, 2);  
   i++;  
   continue;  
  }
  else if (tmp == 32)
  {//处理半角空格  
   result += 161; 
   result += 161; 
  }
  else
  {  
   result += str.substr(i, 2);  
   i++;
  }
 }
 return result;  
}

全角转半角

string ToHalf(string str) {   
    string result = "";   
    unsigned char tmp; unsigned char tmp1;   
    for (unsigned int i = 0; i < str.length(); i++) {   
        tmp = str[i];   
        tmp1 = str[i + 1];   
        cout << "uchar:" << (int) tmp << endl;   
        if (tmp == 163) {///第一个字节是163,标志着是全角字符   
            result += (unsigned char) str[i + 1] - 128;   
            i++;   
            continue;   
        } else if (tmp > 163) {//汉字   
            result += str.substr(i, 2);   
            i++;   
            continue;   
        } else if (tmp == 161 && tmp1 == 161) {///处理全角空格   
            result += "";   
            i++;   
        } else {   
            result += str.substr(i, 1); } } return result;   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值