如题 . 可以用CString .

解决方案 »

  1.   

    两字节内码:区号+0xA0 , 位号+0xa0
    如:第一个汉字“啊”的内码为  0xb0,0xa1GBK范围:
    1st byte    2nd byte
    0x81~0xfe   0x40~0x7e and 0x80~0xfeBIG5范围:
    1st byte    2nd byte
    0x81~0xfe   0x40~0x7e and 0xa1~0xfe
      

  2.   


    一种方法就是 everandforever(Forever) (  ) 的方法,直接判断内码,看这个字节是不是汉字的首字节。另一种方法是使用c++的
    int isleadbyte( int c );
    作用也是判断一个字节是否是一个字符的首字节,要使用它,你的工程必须使用_UNICODE或者_MBCS预编译符。
    一般来讲,默认的工程设置都会使用_MBCS的。
      

  3.   

    to everandforever () :这样可以么?会出现这样的情况: 无论我是否插到一个汉字中间, 这个位置前后的字节都可能是 0x80< n < 0xfe, 这样我就无法判断是否中断了一个汉字了.
      

  4.   

    判断你插入点的前一BYTE是否大于等于0x80,是,则是汉字,
      

  5.   

    这就表示当前位置不适合插入,须后移一个BYTE.
      

  6.   

    取前一个字符
    char a; if(a>0)
     {
      就是汉字字符
     }
      

  7.   

    用这两个函数比较准确:
    int _ismbslead( const unsigned char *string, const unsigned char *current );int _ismbstrail( const unsigned char *string, const unsigned char *current );因为判断mbcs字串内一个随机字符是不是lead/trail,需要回朔该字符之前的部分。
      

  8.   

    你插入的时候恐怕得从STRING的头部开始查起,至少要从能肯定不是一个汉字中间的位置开始查起. 因为如果一个字节是0x81~0xfe, 你无法区分它是一个汉字的第一字节,还是第二字节.
      

  9.   

    判断asc码就可也了。如果是负数,说明是一个汉字
    简单实用
      

  10.   

    你用这个函数吧CharNext或则_tcsinc
      

  11.   

    to 搂主;
      通常采用unicode,因为unicode 中汉字和其他字符一样只占用一个字, 实现插入删除字符串操作,可以避免类似字符问题的繁琐处理,输出时你可以根据需要做适当转换。
      

  12.   

    LPTSTR pszString;      // 一段字符串
    LPTSTR pszSubString;   // 检查的位置if ( -1 == _ismbstrail(pszString, pszSubString) )
    {
            pszSubString ++;
    }
      

  13.   

    用UNICODE函数好象不会有这种问题吧?
      

  14.   

    to   everandforever(Forever) :第二个字节的 0x40~0x7e and 0x80~0xfe  , 所谓and 就是说第二个字节的值在0x40~0x7e 或者 0x80~0xfe之间, 是这样么?
      

  15.   

    不用unicode就只能从头开始搜索!