用一个循环 str :=cny12.56人民币; str2 :=''; for i:=1 to length(str) do if str[i] in ['0'..'9','.'] then str2=str[i]
用一个循环 str :=cny12.56人民币; str2 :=''; for i:=1 to length(str) do if str[i] in ['0'..'9','.'] then str2=str2+str[i]
循环是可以 length(str) 字符串中有汉字 这不把汉字两半了吗 ?
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;
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;
最好是用widestring類型再和ascii碼比,如樓主所想“字符串中有汉字 这不把汉字两半了吗 ?”,上面的“地”字两半后,后半部分就成了字符“n”,所以我想有可能也有便成數字的可能吧。 可以試試 var str:string begin str:='地'; showmessage(str[1]); //是空,汉字全角二字符 showmessage(str[2]); //字符“n”,意外情況 end;
最简单的算法当然是我这种方法,代码极短: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;
str :=cny12.56人民币;
str2 :='';
for i:=1 to length(str) do
if str[i] in ['0'..'9','.'] then
str2=str[i]
str :=cny12.56人民币;
str2 :='';
for i:=1 to length(str) do
if str[i] in ['0'..'9','.'] then
str2=str2+str[i]
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;
. 好像ASCII为 46
=========================把字符一个一个进行对比,如是46,48-57里面的,你就当有用数据保留.
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;
可以試試
var
str:string
begin
str:='地';
showmessage(str[1]); //是空,汉字全角二字符
showmessage(str[2]); //字符“n”,意外情況
end;
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;