作者:佚名 | 来源:网络 | 添加时间:2006-02-23 15:07:32 | 人气:2032
#include <stdio.h>
#include <string.h>
/* 获取字符串首个中文或者英文的字节数 */
int GetCharSize( const char *Data, int Size )
{
const unsigned char *p = (unsigned char *) Data;
if ( p == NULL || Size <= 0 )
return 0;
if ( p[0] < 0xB0 || p[0] > 0xF7 )
return 1;
if ( Size < 2 )
return -1;
if ( p[1] < 0xA1 || p[1] > 0xFE )
return -1;
return 2;
}
/* 判断是否有不合法字符 */
const char *FindInvalidChar( const char *Data, int Size )
{
const char *p = Data;
int r, s = Size;
while ( ( r = GetCharSize( p, s ) ) > 0 ) {
p += r;
s -= r;
}
if ( r == 0 )
return NULL;
return p;
}
/* 返回字符数目 */
int GetCharCount( const char *Data, int Size )
{
const char *p = Data;
int r, c = 0, s = Size;
while ( ( r = GetCharSize( p, s ) ) > 0 ) {
c ++;
p += r;
s -= r;
}
if ( r == 0 )
return c;
return -1;
}
/* 得到每个字符 */
char *PickFirstChar( const char *pData, int pSize )
{
static char zi[3];
static const char *sNew;/* 保存取出一个字符之后的字符串 */
static int sSize;/* 保存调用完成后的长度 */
int i, r;
char *temp = zi;
memset(zi,,sizeof(zi));
sNew = pData ? pData : sNew;
sSize = pSize ? pSize : sSize;
if ( ( r = GetCharSize( sNew, sSize ) ) <= 0 )
return NULL;
for ( i = 0; i < r; i ++ ) {
zi = sNew;
}
sNew += r;
sSize -= r;
return zi;
}
int main()
{
int num;
int size;
char *c;
char str[] = "啊a国b人";
const char *haha = str;
size = strlen(haha);
if (FindInvalidChar(haha, size) == NULL)
{
num = GetCharCount(haha, size);
printf("%d
", num);
}
c = PickFirstChar(haha, size);
while(c != NULL)
{
printf("%s
", c);
c = PickFirstChar(NULL, 0);
}
return 0;
}
|