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运算符来判断字符是否在指定范围内,可以简化判断逻辑。同时,在判断为数字字符后,直接将字符拼接到结果字符串中,避免了逐个判断字符和字符串拼接的操作。
希望可以帮到你!