程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 帶有漢字的字符串截斷出現半個“漢字”的解決方法-C語言源碼,-c源碼

帶有漢字的字符串截斷出現半個“漢字”的解決方法-C語言源碼,-c源碼

編輯:C++入門知識

帶有漢字的字符串截斷出現半個“漢字”的解決方法-C語言源碼,-c源碼


漢字字符的編碼為雙字節,對於漢字字符和單字節字符混排的情況,如果目標截取的字符串內只包含奇數個單字節字符,則會出現半個漢字字符的問題。如下所示:

  (1)天水市秦州區南郭路2號(工行七裡墩分理處? --包含數字字符,單字節

  (2)七裡河區金港城金福花園20號樓3號(金港城?--包含數字字符,單字節。

  (3)甘肅銀馨春天餐飲服務業有限責任公司(省委? --包含英文格式半括號。

  以上為截取字符串前四位以後的顯示結果,其中“?”為半個漢字編碼的顯示。要想解決以上問題可以采用截取最後一個非法字符,並用合法字符替換的方法。實例代碼如下所示:

#include <stdio.h>
int chkHalfChinese(char *buf,int len)
{
        int i = 0;
    int cnt = 0;
    int idx;
    for(i=0;i<len;i++)
     {
           int value = buf[i]&0xFF;
        if(value>160)   
         {
           cnt++;   
           idx=i;
         }
     }
    if(cnt%2)
     {
        buf[idx] =' ';
        return(1);
     }
    else
        {
        return(0);
      }
} 

int main(void)
{
  char str[44] = "天水市秦州區南郭路2啊(工行七裡墩分理處裡家";  
  if(chkHalfChinese(str,40)==1)
  {
    printf("true\n");
  }
  else
  {
    printf("false\n");
  }
  printf("%s\n",&str);
  return 0;
}

  


程序代碼在Linux環境下測試通過,運行結果如下圖所示:

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved