请问如何判断字符串里是不是含有除汉字、可显示以及空格等可输入字符以外的字符。

解决方案 »

  1.   

    每次取一个字符,ord(该字符)判断
    大于128的话,取到的是半个中文,加1继续取
    小于128,这里面有些是可见字符,有些是不可见得
    你自己找找,他们的ascII码
    如回车换行是10,13,小写a。。z是65-97,0。。9是38-47,你自己找找,比较一下就是什么字符了
      

  2.   

    strEnglishSign:string = ',./<>?''";:]}[{\|=+-_)(*&^%$#@!~`';
    strNumberSign:string = '0123456789';
    strCharSign:string= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';procedure TMDIChild.CheckFileInfo;
    var
      BlankNumber,ChineseCharNumber,EnglishCharNumber,
      EnglishSignNumber,NumberCharNumber,OtherCharNumber:integer;
      s :string;
      i:integer;
    begin
      BlankNumber := 0;
      ChineseCharNumber := 0;
      EnglishCharNumber := 0;
      EnglishSignNumber := 0;
      NumberCharNumber := 0;
      OtherCharNumber := 0;
      s := Editor.Text;//Editor是TRichEdit  for i := 1 to Length(s) do
      begin
        if(s[i] = ' ') then Inc(BlankNumber)
        else if(integer(s[i]) > $80) then Inc(ChineseCharNumber)
        else if(Pos(s[i],strEnglishSign) <> 0) then Inc(EnglishSignNumber)
        else if(Pos(s[i],strCharSign) <> 0) then Inc(EnglishCharNumber)
        else if(Pos(s[i],strNumberSign) <> 0) then Inc(NumberCharNumber)
        else Inc(OtherCharNumber);
      end;  ShowMessage('中文(连中文标点符号):'+ IntToStr(ChineseCharNumber div 2)+#13#10
                + '数字字符:'+IntToStr(NumberCharNumber)+#13#10
                + '空格:'+IntToStr(BlankNumber)+#13#10
                + '英文字符:'+IntToStr(EnglishCharNumber)+#13#10
                + '英文标点:'+IntToStr(EnglishSignNumber)+#13#10
                + '不可见字符(回车、换行等):'+IntToStr(OtherCharNumber));
    end;