UTF8编码格式下,1个中文字符占3个字节,1个英文字符占1个字节。
如果遇到一大堆中英文字符串混杂,如何换行呢,请看代码:
/*
功能:UTF8中英文字符换行
输入:szStr: 字符串
ncount:每行容纳的中文字符
输出:lineStr: 每一行字符
返回:无
*/
static void philofly_break_line(char *szStr, int ncount, char **lineStr)
{
int nsum = 0;
int ntotal = ncount*3;
int i = 0;
if(szStr == NULL || lineStr == NULL || *lineStr == NULL)
return;
if(strlen(szStr) < ntotal)
{
strcpy(*lineStr, szStr);
return;
}
while( *szStr)
{
if( (*szStr) < 0)//chinese char
{
nsum += 3;
szStr += 3;
}
else// 'a' to 'z' or 'A' to 'Z' or '0' to '9'
{
szStr++;
nsum++;
}
if(nsum>=ntotal || (*szStr=='\0') )
{
if( *szStr == '\0 )
{
strncpy(lineStr[i], szStr-nsum, nsum);//last chars
break;
}
if(nsum==ntotal)
{
strncpy(lineStr[i], szStr-nsum, ntotal);
}
else if(nsum > ntotal)
{
if(nsum%3 == 1)// more one digital or english char
{
strncpy(lineStr[i], szStr-nsum, ntotal-1);
szStr -= 1;
}
else if(nsum%3 == 2)//more one chinese char
{
strncpy(lineStr[i], szStr-nsum, ntotal-3);
szStr -= 3;
}
}
}
nsum = 0;
i++;
}
}