欢迎访问 水平网    今天是:2017年11月22日 注册 | 登录 | 订阅 | 收藏
>> Visual C++ >> 分割GB2312中英文字符
推荐代码
热点代码

分割GB2312中英文字符

作者:未知,  来源:网络,  阅读:1435,  发布时间:2014-05-19  【放入收藏夹
代码:C++复制
#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;
}
Tags:GB2312中英文字符
您可能还有兴趣查阅的内容
评论【共有0条评论】查看所有评论
昵称:(*)   邮箱:   QQ:   验证码: 看不清楚?点击刷新验证码