借用别人写的一个替换函数 procedure replace(var s:string;const SourceChar:pchar;const RChar:pchar); var ta,i,j:integer; m,n,pn,sn:integer; SLen,SCLen,RCLen:integer;//SLen表示原串的长度,SCLen表示模式传的长度,RCLen表示替换串的长度 IsSame:integer; newp:array of char;//用来保存替换后的字符数组 begin SLen:=strlen(pchar(s));SCLen:=strlen(SourceChar);RCLen:=strlen(RChar); j:=pos(string(SourceChar),s); s:=s+chr(0);ta:=0;i:=j; while s[i]<>chr(0) do //这个循环用ta统计模式串在原串中出现的次数 begin n:=0;IsSame:=1; for m:=i to i+SCLen-1 do begin if m>SLen then begin IsSame:=0;break; end; if s[m]<>sourceChar[n] then begin IsSame:=0;break; end; n:=n+1; end; if IsSame=1 then begin ta:=ta+1;i:=m; end else i:=i+1; end; if j>0 then begin pn:=0;sn:=1; setlength(newp,SLen-ta*SCLen+ta*RCLen+1);//分配newp的长度,+1表示后面还有一个#0结束符 while s[sn]<>chr(0) do //主要循环,开始替换 begin n:=0;IsSame:=1; for m:=sn to sn+SCLen-1 do //比较子串是否和模式串相同 begin if m>SLen then begin IsSame:=0;break; end; if s[m]<>sourceChar[n] then begin IsSame:=0;break; end; n:=n+1; end; if IsSame=1 then//相同 begin for m:=0 to RCLen-1 do begin newp[pn]:=RChar[m];pn:=pn+1; end; sn:=sn+SCLen; end else begin //不同 newp[pn]:=s[sn]; pn:=pn+1;sn:=sn+1; end; end; newp[pn]:=#0; s:=string(newp); //重置s,替换完成! end; end;调用 ================== var s:string; begin s:='¥875,321.56'; replace(s,'¥',''); replace(s,',',''); ShowMessage(s); end;
用StringReplace来替换¥和逗号不就行了
- -! 我是自己写了一个删除字符串里面特定字符的函数 ,么想到用了这么多时候,还有更好的方法..靠~~~ function DelStr(s, Subs: string): string; var i : Integer; sRet : string; begin sRet := s; for i := Length(sRet) downto 1 do if sRet[i] = Subs then Delete(sRet, i, 1); Result := sRet; end;
同意liangqingzhi(老之) 的做法: var temp : String; begin temp :='¥875,321.56';temp := StringReplace(temp,'¥','',[rfReplaceAll]); temp := StringReplace(temp,',','',[rfReplaceAll]); showmessage(temp); end;
procedure replace(var s:string;const SourceChar:pchar;const RChar:pchar);
var
ta,i,j:integer;
m,n,pn,sn:integer;
SLen,SCLen,RCLen:integer;//SLen表示原串的长度,SCLen表示模式传的长度,RCLen表示替换串的长度
IsSame:integer;
newp:array of char;//用来保存替换后的字符数组
begin
SLen:=strlen(pchar(s));SCLen:=strlen(SourceChar);RCLen:=strlen(RChar);
j:=pos(string(SourceChar),s);
s:=s+chr(0);ta:=0;i:=j;
while s[i]<>chr(0) do //这个循环用ta统计模式串在原串中出现的次数
begin
n:=0;IsSame:=1;
for m:=i to i+SCLen-1 do
begin
if m>SLen then begin IsSame:=0;break; end;
if s[m]<>sourceChar[n] then begin IsSame:=0;break; end;
n:=n+1;
end;
if IsSame=1 then begin ta:=ta+1;i:=m; end else i:=i+1;
end;
if j>0 then
begin
pn:=0;sn:=1;
setlength(newp,SLen-ta*SCLen+ta*RCLen+1);//分配newp的长度,+1表示后面还有一个#0结束符
while s[sn]<>chr(0) do //主要循环,开始替换
begin
n:=0;IsSame:=1;
for m:=sn to sn+SCLen-1 do //比较子串是否和模式串相同
begin
if m>SLen then begin IsSame:=0;break; end;
if s[m]<>sourceChar[n] then begin IsSame:=0;break; end;
n:=n+1;
end;
if IsSame=1 then//相同
begin
for m:=0 to RCLen-1 do
begin
newp[pn]:=RChar[m];pn:=pn+1;
end;
sn:=sn+SCLen;
end
else
begin //不同
newp[pn]:=s[sn];
pn:=pn+1;sn:=sn+1;
end;
end;
newp[pn]:=#0;
s:=string(newp); //重置s,替换完成!
end;
end;调用
==================
var
s:string;
begin
s:='¥875,321.56';
replace(s,'¥','');
replace(s,',','');
ShowMessage(s);
end;
function DelStr(s, Subs: string): string;
var
i : Integer;
sRet : string;
begin
sRet := s;
for i := Length(sRet) downto 1 do
if sRet[i] = Subs then
Delete(sRet, i, 1);
Result := sRet;
end;
var
temp : String;
begin
temp :='¥875,321.56';temp := StringReplace(temp,'¥','',[rfReplaceAll]);
temp := StringReplace(temp,',','',[rfReplaceAll]);
showmessage(temp);
end;