delphi 提取字符中的数字,我为啥测试通不过?_(标签-Ar|关键词-Function)

该问题来自社区帖: https://bbs.csdn.net/topics/617224147.

Function Setstring(cString:string):string;   {提取数字}
 VAr
   i:integer;
   str:string;
  begin //到这里就卡住了
    str:='';
      For i:=1 to length(cString) do
          begin
           if Pos(cString[i],'0123456789.')<=0 then
             break
           else
            Case cString[i] of
             '.': str:=Str+'.'; 

             '0': str:=Str+'0';   '1': str:=Str+'1'; '2': str:=Str+'2';
             '3': str:=Str+'3';   '4': str:=Str+'4'; '5': str:=Str+'5';
             '6': str:=Str+'6';   '7': str:=Str+'7';
             '8': str:=Str+'8';   '9': str:=Str+'9';
            end;
    end;
    Setstring:=str;
  end;
 

引用 皆我百晓生 小程序回复内容作答:
根据代码,可以看出问题出在代码的逻辑上。

首先,在进行循环遍历字符串的时候,如果发现有非数字字符,就会执行break跳出循环,导致没有遍历完整个字符串。

其次,在数字字符的判断部分,使用了Case语句,这样会导致每一个数字字符都要进行一个判断和字符串的拼接,造成效率低下。

以下是修改后的代码:

function Setstring(cString: string): string;
var
  i: integer;
  str: string;
begin
  str := '';
  for i := 1 to Length(cString) do
  begin
    if cString[i] in ['0'..'9', '.'] then
      str := str + cString[i];
  end;
  Result := str;
end;

修改后的代码使用了in运算符来判断字符是否在指定范围内,可以简化判断逻辑。同时,在判断为数字字符后,直接将字符拼接到结果字符串中,避免了逐个判断字符和字符串拼接的操作。

希望可以帮到你!