一个字符数组array既有字母又有汉字,如果用array[i]取到第i-1个字符,如果该array[i]在0-127之外(就是汉字的半个),那么只取array[i-1]和array[i+1]如何判断这两个到底是哪个和array[i]组成汉字的???从该数组头开始读取,遇到第一个在128-255之间的,那么之后的那个肯定和他组成汉字,但是这样效率太低了。不知道各位大哥有好办法不,还请赐教!

解决方案 »

  1.   

    如果是ANSI的话,只有从头一个字节一个字节读,遇到汉字头字节就跳一个字节。
    只用这个办法是可靠的,别的都不可靠。
    如果真的是特别长的文本,非要优化的话,可以从i的位置向前找,找到连续2个<127的字符,然后从这之后仍然是一个字节一个字节读。
      

  2.   

    建议用UNICODE,这样就方便了!
    只要进行转化一下就行了!
      

  3.   

    效率不低吧?
    也就是遍历一遍字符串所在的数组啊
    我是用过的 感觉还可以 贴一段代码~~
    汉字转换为unicodefor(int i = 0 ; i < length; i++)
    {
    CString str = StrIn.Mid(i,1);
    unsigned char temp;
    strcpy((char*)&temp,str);
    if(temp>=128) //汉字特征
    {
    CString strchar = StrIn.Mid(i,2);
    unsigned short Hex;
    char buffer[4];
    MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,strchar,3,&Hex,1);
    sprintf(buffer,"%x",Hex);
    StrOut += buffer;
    StrOut += "  ";
    i++;
    }
    else
    {

    char buffer[2];
    itoa(temp,buffer,16);
    // StrOut += "00";
    StrOut += buffer;
    StrOut += "  ";
    }
    }
      

  4.   

    还是转成UNICODE ,就很方便了