c/c++整理--程式設計計算含有漢字的字串長度
阿新 • • 發佈:2019-02-14
編寫gbk_strlen函式,計算含有漢字的字串長度,漢字作為一個字元處理;已知:漢字編碼為雙位元組,其中首位元組<0,尾位元組在0~63以外(如果一個位元組是-128~127)。
gbk_strlen函式中,使用了兩個指標指向的地址之差來獲得字串長度。當遇到中文雙位元組時,由於中文漢字佔兩個位元組,因此p移動兩個指向中文漢字的後一個字元;而同時為了時漢字的長度算一個,則需要將str移動一位#include <iostream> #include <string.h> using namespace std; int gbk_strlen(const char* str) { const char* p = str; //p用於後面遍歷 while(*p) //若是結束符0,則結束迴圈 { if(*p < 0 && (*(p+1)<0 || *(p+1) < 63)) //中文漢字情況 { str++; //str移動一位,p移動移動2位,因此長度加1 p += 2; } else { p++; //str不動,p移動一位,長度加1 } } return p-str; //返回地址之差 } int main() { char str[] = "abc你好123中國456"; cout<<gbk_strlen(str)<<endl; }
輸出
13