有人问我Delph问题,我不熟悉,搞不定!谁能帮我的忙!谢谢!function TForm1.GetChsByString(str:string):string;//!获得中文
var
 len,j:integer;
 hzchar :string;
begin  j:=1;
  while (j <= Length(str)) do
  begin
    if ord(str[j])>=127 then    //!判断是否是中文
   begin
     hzchar:=str[j] + str[j+1];
     result:=result+hzchar;
     j := j + 2;
   end
   else
   begin
    j:=j+1;
   end;
  end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
str1:string;
j:integer;
begin
    str:='zz中国zz';
    for j:=1 to 5 do
    begin
      //!这里只是 付值
      str1:=GetChsByString(str);
      showmessage(str1);
      Edit1.Text:= str1;
      //str1,为什么会自动增加 ,变成《中国中国中国中国中国》
    end;
    //!我希望的结果是 有没有循环结果应该都是 《中国》
end;
end.

解决方案 »

  1.   

    汗,你不是把程序段放在一个循环里面吗? 那当然就重复5次了.for j:=1 to 5 do
        begin
          //!这里只是 付值
          str1:=GetChsByString(str);
          showmessage(str1);
          Edit1.Text:= str1;
          //str1,为什么会自动增加 ,变成《中国中国中国中国中国》
        end;把for,begin,end三行去掉就不重复了.
      

  2.   

    你看到的Edit1.Text是循环完成以后的。Edit1.Text增加并不表示str1自动增加了。
      

  3.   

    把函数GetChsByString作如下修改:
    function TForm1.GetChsByString(str:string):string;//!获得中文
    var
     len,j:integer;
     hzchar :string;
     tmpStr: String;
    begin  j:=1;
      while (j <= Length(str)) do
      begin
        if ord(str[j])>=127 then    //!判断是否是中文
       begin
         hzchar:=str[j] + str[j+1];
         tmpStr:=tmpStr+hzchar;
         j := j + 2;
       end
       else
       begin
        j:=j+1;
       end;
      end;  Result := tmpStr;
    end;
      

  4.   

    function TForm1.GetChsByString(str:string):string;//!获得中文
    var
     len,j:integer;
     hzchar :string;
    begin  j:=1;
      while (j <= Length(str)) do
      begin
        if ord(str[j])<=127 then    //!判断是否是中文
          str[j]:=#32
        j:=j+1;
       end;
      result:=trim(str);
    end;
      

  5.   


    function TForm1.GetChsByString(str:string):string;//!获得中文 var j:integer;
     
    begin  j:=1;
      while (j <= Length(str)) do
      begin
        if ord(str[j])<=127 then    //如果不是中文
          str[j]:=#32;//就换成空格;
        j:=j+1;
       end;
      str:=AnsiReplaceStr(str,#32,'');//--把空格去掉,最后得到的就全是中文字符了。
      result:=trim(str);
    end;
      

  6.   

    function GetChinese(same:widestring):string;
    var
    onestr:string;
    strcount,i:integer;
    begin
    strcount:=length(same);
    for i:=1 to strcount do 
     begin
      onestr:=same[i];
      if length(onestr)>1 then result:=result+onestr;
     end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
       showmessage(getchinese(edit1.Text));
    end;edit1.text:='Edit1数据库地方后555555环境 '
    结果:=数据库地方后环境
      

  7.   

    function GetChinese(same:widestring):string;
    var
    onestr   :string;
    strcount,i :integer;
    begin
    strcount:=length(same);
    for i:=1 to strcount do 
     begin
      onestr:=same[i];
      if length(onestr)>1 then result:=result+onestr;//因为中文是双字节,所以length(onestr)=2
          else result:=result+' ';//也可以加上这句,把单字节(非中文)变成空格
     end;
    end;
      

  8.   

    楼上的方法正解,注意到了widestring与ansistring,这个才是关键。