如 : 字符串 "cny12.56人民币"     只返回12.56 有没有好的算法

解决方案 »

  1.   

    用一个循环
    str :=cny12.56人民币;
    str2 :='';
    for i:=1 to length(str) do
     if str[i] in ['0'..'9','.'] then
      str2=str[i]
      

  2.   

    用一个循环 
    str :=cny12.56人民币; 
    str2 :=''; 
    for i:=1 to length(str) do 
    if str[i] in ['0'..'9','.'] then 
      str2=str2+str[i]
      

  3.   

    循环是可以   length(str)  字符串中有汉字   这不把汉字两半了吗 ?
      

  4.   

    function TForm1.GetFigureData(str: String): String;
    var
      i : Integer;
      sReturn : String;
    begin
      sReturn := '';
      for i := 1 to Length(str) do
        begin
          if (ord(str[i]) >= 48) and (ord(str[i]) <= 57) then
            sReturn := sReturn + str[i]
          else if str[i] = '.' then
            begin
              sReturn := sReturn + str[i] ;
            end;
        end;
      Result := sReturn ;
    end;procedure TForm1.Button1Click(Sender: TObject); //测试代码
    var
      s : String;
    begin
       s := GetFigureData('cny12.56人民币');
       ShowMessage(s);
    end;
      

  5.   

    你生明成widestring就把汉字做一字符了。如果你要是字符串中是“21世紀1234.5人民币”上面方法就不行了
      

  6.   

    1-9好像ASCII为 48--57   
    .  好像ASCII为 46
    =========================把字符一个一个进行对比,如是46,48-57里面的,你就当有用数据保留.
      

  7.   


    var
      i:Integer;
      str,str2:string;
    begin
      str :='你好我是三个首都师大扫地cny12.56人民币';
      str2 :='';
      for i:=1 to length(str) do
        if  (str[i]  in ['0'..'9','.']) then
          str2:=str2+str[i];
      ShowMessage(str2);
    end;
      

  8.   

    最好是用widestring類型再和ascii碼比,如樓主所想“字符串中有汉字  这不把汉字两半了吗 ?”,上面的“地”字两半后,后半部分就成了字符“n”,所以我想有可能也有便成數字的可能吧。
    可以試試
    var
      str:string
    begin
      str:='地';
      showmessage(str[1]);  //是空,汉字全角二字符
      showmessage(str[2]);  //字符“n”,意外情況
    end;
      

  9.   

    最简单的算法当然是我这种方法,代码极短:procedure TForm1.Button1Click(Sender: TObject);
    var
     k:integer;
     str:WideString;
    begin
    str :='cny12.56人民币';
    for k:=length(str) downto 1 do
    if not (ord(str[k]) in [48..57,46]) then  delete(str,k,1);
    showmessage(str);
    end;
      

  10.   

    如果要考虑双字节文字,就用WideString