我现在要将一个String的字符串中数字提取出来,该如何做:如将"20只/盒"这个串中提取20这个数字。请附代码,灌水请留步。

解决方案 »

  1.   

    function GetNumFromStr(const str: String;const hex:boolean=false): String;
    var
     i:integer;
     charset:Set of char;
    begin
    if hex then
     charset:=['0'..'9','a'..'f','A'..'F','.']
    else
     charset:=['0'..'9','.'];
    for i := 1 to Length(str) do
      begin
        if (str[i] in charset) then
          result:= result + uppercase(str[i]);
      end;
    end;可以取得十六进制的数字!可以包含小数点,但你必须保证只有一个小数点!
      

  2.   

    type charstr :array[0..10] of char
    var charstr1:charstr;
        i,m:integer;
         strnew;string
    begin
      charstr1:=charstr('0','1','2','3','4','5','6','7','8','9','.');
      for i:=1 to length(str) do
      begin
        if (str[i] in charstr1) then
            strnew:=strnew + str[i];
      end;
      m:=strtoint(strnew);
    end;
      

  3.   

    var 
      I,Code:integer;
    begin
      val('20只/盒',I,code);
      //I即是提取的数字  
    end;
      

  4.   

    看了上面两位大虾的意见,自己小瞧了这个问题,便稍微改造了一下
    var
      charstr: Set of char;
      i: integer;
      m: extended;
      strnew: string;
      str: string;
    begin
      charstr :=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.'];
      str := edit1.text;
      for i := 1 to length(str) do
      begin
        if (str[i] in charstr) then
          strnew := strnew + str[i];
      end;
      showmessage(strnew);
      m := strtofloat(strnew);
    end;
    不过都把字符串里的数字凑一起了,如果上面再添上用val(s,I,code)判断一下数字紧挨的字符,就可以将数字分开取出了,例如:“12.30元+20.00元”钟的12.30和20.00
      

  5.   

    没这么麻烦吧
    procedure TForm1.Button2Click(Sender: TObject);
    var
       s,dig:string;
       i:integer;
    begin
       s:='23lsdfkkl';
       dig:='';
         for i:=0 to length(s) do
             if (ord(s[i])>=48)and(ord(s[i])<=57) then  //判断是否数字
                 dig:=dig+s[i];
    end;
      

  6.   

    TO:SSL2000;你的方法好,但若遇见小数呢?