1. 程式人生 > >C++中的半形、全形字元轉換

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;