Chinaunix
标题:
[算法交流]-实用算法(在半/全角字串中取小于最大长度的完整全角字或半角字符)
[打印本页]
作者:
ChinaDream
时间:
2006-01-14 16:47
标题:
[算法交流]-实用算法(在半/全角字串中取小于最大长度的完整全角字或半角字符)
例如:
“我在正在TEST my application请稍候 ”
取27个字符=“我在正在TEST my application”
取28个字符=“我在正在TEST my application”
取29个字符=“我在正在TEST my application请”
我写的如下,欢迎大家提供好的算法!
BOOL IsChineseChar(const char Char)
{
if(Char & 0x80)
{
return (TRUE);
}
else
{
return (FALSE);
}
}
int ChineseCharLimit(char *pszBuffer,int iMaxLenth)
{
int i ={0};
char *pszSrc ={0};
char *pszChr ={0};
pszSrc = (char *)pszBuffer;
pszChr = NULL;
for(i=0;i<iMaxLenth;i++)
{
if(pszSrc
==0)
{
return (0);
}
else if(IsChineseChar(pszSrc
))
{
pszChr = &pszSrc
;
i++;
}
}
if((pszChr == NULL) || ((int)((&pszChr[1]) - pszBuffer) < iMaxLenth))
{
pszBuffer[iMaxLenth]=0;
return (1);
}
else
{
pszChr[0]=0;
pszChr[1]=0;
return (2);
}
}
void main()
{
szTmp[128];
strcpy( szTmp,"我在正在TEST my application请稍候" );
ChineseCharLimit( szTmp,27 );
printf( "取27个字符=%s",szTmp );
strcpy(szTmp,"我在正在TEST my application请稍候" );
ChineseCharLimit( szTmp,28 );
printf("取28个字符=%s",szTmp);
strcpy( szTmp,"我在正在TEST my application请稍候" );
ChineseCharLimit( szTmp,29 );
printf( "取29个字符=%s",szTmp );
}
[
本帖最后由 ChinaDream 于 2006-1-14 16:50 编辑
]
作者:
ChinaDream
时间:
2006-02-09 18:10
怎么没有人回应呢?
作者:
doni
时间:
2006-02-09 18:35
这个我也写过的,以前好象也发过贴子
char *cut_chinese(chinese, length)
char chinese[100];
int length;
{
static char string[100];
strcpy(string, chinese);
if (strlen(string) > length){
int i=0;
while (i < length) {
if (isascii(string[i]) == 0)
i++;
i++;
}
if (i > length) /* string[length] is hi byte */
string[length-1]='\0';
else /* string[length] is low byte */
string[length] = '\0';
}
return((char *)string);
}
复制代码
[
本帖最后由 doni 于 2006-2-9 18:37 编辑
]
作者:
ChinaDream
时间:
2006-02-09 18:44
好!先研究
作者:
yzc2002
时间:
2006-02-10 08:57
这只是一个简单的编程题,组织好思路就可以了,算法还谈不上吧?
int chn_strcpy(char *dest, char *string, int n)
{
int len, flag=0;
for(len=0; string[len] && len < n; len++)
if(string[len] & 0x80) flag = !flag;
len -= flag;
memcpy(dest, string, len);
dest[len] = 0;
return len;
}
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2