c utf 8文字列の長さを計算し、中国語で1文字を計算する
8974 ワード
#include
using namespace std;
int getStrLenUtf8(const char* str)
{
if (!str) return 0;
int len = (int)strlen(str);
int ret = 0;
for (const char* sptr = str; (sptr - str) < len && *sptr;)
{
unsigned char ch = (unsigned char)(*sptr);
if (ch < 0x80)
{
sptr++; // ascii
ret++;
}
else if (ch < 0xc0)
{
sptr++; // invalid char
}
else if (ch < 0xe0)
{
sptr += 2;
ret++;
}
else if (ch < 0xf0)
{
sptr += 3;
ret++;
}
else
{
// 4
sptr += 4;
ret++;
}
}
return ret;
}
// , , : , <0, 0-63 。
int gbkStrlen(const char* str)
{
const char* p = str;
while (*p)
{
if (*p < 0 && (*(p + 1) < 0 || *(p + 1) > 63))
{
str++; //str ,p , 1
p += 2;
}
else
{
p++; //str ,p 1
}
}
return p - str;
}
int main()
{
char* str = " 12sdfsd";
cout << getStrLenUtf8(str) << endl;
system("pause");
return 0;
}