面对读入和输出中英文混合的程序,
1.如何区分全角和半角
2.如何分别中文和英文
用wchar_t&wstring就可以解决问题吗?请推荐几篇文献看看。目前主要是在VC2005下开发程序。

解决方案 »

  1.   

    1、半角就是ACSII码范围的字符(0~0x7f);
    2、英文就是'A'~'Z'和'a'~'z'。
      

  2.   

    1、UNICODE模式下,TCHAR就和wchar_t是一回事。
    2、DBCS/MBCS模式下,要先正确的设置setlocale(),
    然后用 _tcsinc(), _tcsdec()可以对字符串指针做增减操作,
    函数内会自动的判断是否为中文,相应的将指针增一或者增二。
    可参考其他_tsc打头的函数,MSDN里有说明。
    3、DBCS/MBCS模式下,正确的设置setlocale()后,
    isleadbyte()函数可以判断字符串指针当前所指字符是否为汉字字符的开始。
      

  3.   

    使用wchar_t也就是说你是工作在Unicode模式,每个字符有两个字节。英文字符高字节肯定是0(也就是整个字符值小于256)。
    另外需要注意,所有使用的字符或串前面需要添加前缀L,如L'A', L"HelloWorld"
      

  4.   

    4楼说法有误,第一个字节大于或等于0xa0,第二个字节不一定的,
    因为通常windows系统默认的中文字符集是gbk,而不是gb2312。
      

  5.   

    如果我用char,好像中文第一个是负数
      

  6.   

    主要char和wchar_t最好不要混合使用(除非你对它们已经很了解了)。
    要么全部使用Unicode(也就是使用wchar_t),注意默认情况下是使用Unicode(所以这时不要使用char了)
    要么全部不使用Unicode,所以这时需要创建非Unicode的工程,然后在里面使用char.
    而在不使用Unicode的情况下面,还需要注意使用的字符集是什么,而在中文环境下,这时通常英文字符只使用一个字节,范围在0和127之间;而中文字符使用两个字节,每个字节都不小于128(如果是signed char,也就是两个字节都是负数)(关于第二个字节的符号我不确认,但是至少第一个字节是负数,而如果对字符集进行扩充,有可能允许第二个字节是正的)
      

  7.   

    都在说如何判断字符是否为中文的问题,系统已经提供函数了为什么不用?3、DBCS/MBCS模式下,正确的设置setlocale()后,
    isleadbyte()函数可以判断字符串指针当前所指字符是否为汉字字符的开始。
      

  8.   

    英文和英文符号都是大于0的
    中文和中文符号两个字节都是小于0的
    GB2312和GBK 我记得应该是高位小于0 低位大于零LZ可以自己写个程序测试一下
    通过编码应该可以判断
      

  9.   

    楼主应先把 UNICODE 搞明白,再着手开发。
      

  10.   

    汉语是一个字符由两个字节组成,此方法可以判断前后两个字符是不是属于双字,如果是双字,则前后两个字符可能是属于一个中文或日文字符,楼主不妨试试吧。。呵呵。。
    BOOL IsWideChar( CHAR szData[2] )
    {
    unsigned int nChar = szData[0] * 256 + szData[1];
    if ( _ismbclegal(nChar) != 0 )
    {
    return TRUE;
    }
    else
    {
    return FALSE;
    }
    }
      

  11.   

    这些字符的转换我也很糊涂,特别是什么 UNICODE ,学习