是不是char[i]&0x80 为真就一定是汉字? 希望对汉字处理有研究的能详细解说一下。

解决方案 »

  1.   

    是这样子的,从头开始遍历字符串,如果(char[i]&0x80)==0x80,则这个字符和下一个字符组成一个汉字,否则就是英文,这样子是可以的,更通用一些的做法是这样子的,可以在任何语言下区分
    int main(int argc, char* argv[])
    {
    char *str="abc中文汉字def";
    char *p=str,*p1;
    unsigned short ch;
    //str2按字遍历字符串
    string str2="";
    while(strcmp(p,"")!=0)
    {
    str2="";
    p1=CharNextExA(936,p,0);//936是简体中文
    int i=p1-p;
    if(i==1)
    {
    ch=(unsigned char)*p;
    str2+=*p;
    }else if(i==2)
    {
    ch=(*p)*256+*(p+1);
    str2+=*p;
    str2+=*(p+1);
    }
    p=p1;
    // p是剩下的字符串,ch是一个字的值
    }
    return 0;
    }
      

  2.   

    : zfive5(醉马不肖) ( ) 信誉:
    ????什么意思?
      

  3.   

    在ANSI C标准中一个汉字由两个字节组成,判断一个字符是否为汉字就是判断第一个字节的最高位是否为1,至于第二个字节没有规定。
    用Unicode就简单了,一个汉字和普通字符都占用两字节。
      

  4.   

    #include <iostream>
    #include <string>
    using namespace std;int main(int argc, char* argv[])
    {
    string user_name;
    char per[256] = "sdfsdf爱情是个坏东西!sdfsdf";
    char pnew[256] = {0};
    unsigned char peru[256];
    int i = 0,j;         cout<<per<<endl;
    while ((peru[i] = per[i]) != '\0')
    i++; i = 0;
    j = 0;
    while(peru[i] != '\0') 
             {
    if((int)(peru[i]) >= 128)
    {
    pnew[j] = peru[i];
    i++;
    j++;
    pnew[j] = peru[i];
    i++;
    j++;
    }
    else
    i++;
    }
    cout<<pnew<<endl; return 0;
    }