procedure TForm1.Button1Click(Sender: TObject);
var
  S: string;
begin
  S := '1四234三567一8二';
  ShowMessage(Format('汉字:%d(个)', [Length(S) - Length(WideString(S))]));
  ShowMessage(Format('英文:%d(个)', [Length(WideString(S)) - (Length(S) - Length(WideString(S)))]));
end;

解决方案 »

  1.   

    var iEnglish,iChinese,ii: Integer;
        sStr: String;begin
      iEnglish := 0;
      iChinese := 0;
      for ii := 1 to Length(sStr) do
      begin
        if (ORD(sStr[ii]) >= 65) and (ORD(sStr[ii]) <= 122) then
          Inc(iEnglish)
        else
        if (ORD(sStr[ii])>123 ) then  //记不得汉字字符是从多少开始了!假设为123
          Inc(iChinese);     
           
      end;
    end;
      

  2.   

    genphone_ru(票票) 
    汉字的是从大于127开始的。。 zswang(伴水)(* pascal→c *) 
    你的程序我怎么看不懂啊。
      

  3.   

    genphone_ru(票票)
    Error :
    Error1  汉字字符起码大于128,实际要大于160
    Error2:汉字是双字节,所以iChinese要除2,更好的方法是统计两个>160的字符连在一起
      

  4.   

    to deathcat:
    WideString:双字节字符串类型
    MBCS:多字节字符系统
    在 WideString 中一个汉字就被看成一个字符
    Length(S) //得到全部字符个数
    Length(WideString(S)) //得到MBCS字符个数//利用强制转换
    两项相减当然就可以得到减少了多少个字符,也就是有多少个双字节字符在其中
      

  5.   

    使用CharType函数就可以了。自己看帮助吧,不要说...
      

  6.   

    不好意思敲错了。呵呵,应该是ByteType函数。勿怪勿怪