1. 程式人生 > >c/c++整理--程式設計計算含有漢字的字串長度

c/c++整理--程式設計計算含有漢字的字串長度

編寫gbk_strlen函式,計算含有漢字的字串長度,漢字作為一個字元處理;已知:漢字編碼為雙位元組,其中首位元組<0,尾位元組在0~63以外(如果一個位元組是-128~127)。

#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;
}
gbk_strlen函式中,使用了兩個指標指向的地址之差來獲得字串長度。當遇到中文雙位元組時,由於中文漢字佔兩個位元組,因此p移動兩個指向中文漢字的後一個字元;而同時為了時漢字的長度算一個,則需要將str移動一位

輸出

13