如何替换字符串中的字符(50分)

J

Jao

Unregistered / Unconfirmed
GUEST, unregistred user!
比如说有一个日期样的字符串“1999/03/04”,我想把“/”全部换成“-”,该怎样做?谢谢。
(不要告诉我用FormatDateTime,上面只是举个例子而已,我想找一个可替换字符串的函数)
 
Y

yifeng

Unregistered / Unconfirmed
GUEST, unregistred user!
分析整个字符串,遇到"/",就换成"-"不就可以了
常用的话,自己写一个函数
 
J

jghuang

Unregistered / Unconfirmed
GUEST, unregistred user!
可替换字符串的函数,好像没听说过,自己写一个吧.
不过要注意的是,不要把不应该替换的东西也给改了.
 
T

Town

Unregistered / Unconfirmed
GUEST, unregistred user!
正好我手头上有一个刚写的,改了改给你用用,呵呵!

Function NewString(OldChar: Char
NewChar: Char
OldString: String):String;
var
i:Integer;
TempString:string;
begin
TempString:=OldString;
for i:=1 to Length(OldString) do
begin
if OldString<>OldChar then
TempString:=OldString
else
begin
TempString:=NewChar;
end;
end;
result:=TempString;
end;
 
R

redforks

Unregistered / Unconfirmed
GUEST, unregistred user!
function replaceAll( const s: String
const orgSubStr, destSubStr: String ): String;
var
startIndex: integer;
begin
startIndex := 0;
result := s;
while startIndex <= length( result ) do
result := replace( result,orgSubStr,destSubStr, startIndex );
end;

Replace All orgSubStr to destSubStr in String s
new String is Returned by Return Value

你说的情况就可以写成:ShowMessage(replaceAll('1999/03/04','/','-'));
 
T

Town

Unregistered / Unconfirmed
GUEST, unregistred user!
再精简精简,呵呵.
Function NewString(OldChar: Char
NewChar: Char
OldString: String):String;
var
i:Integer
TempString:string;
begin
TempString:=OldString;
for i:=1 to Length(OldString) do
begin
if OldString=OldChar then
TempString:=NewChar

end;
result:=TempString;
end;
 
A

aimingoo

Unregistered / Unconfirmed
GUEST, unregistred user!
可以使用D4的函数:
function StringReplace(const S, OldPattern, NewPattern: string;
Flags: TReplaceFlags): string;

{ WrapText will scan a string for BreakChars and insert the BreakStr at the
last BreakChar position before MaxCol. Will not insert a break into an
embedded quoted string (both ''' and '"' supported) }

如果不合用,我可以给你一个自己写的。 :)
 

曹晓钢

Unregistered / Unconfirmed
GUEST, unregistred user!
再加一种实现:

>再精简精简,呵呵.
Function NewString(OldSub, NewSub, OldString: String):String;
var
TmpS:string
oldpos:integer;
begin
TmpS:=OldString;
repeat
oldpos:=pos(OldSub,TmpS);
if oldpos<>0 then
TmpS:= copy(TmpS,1,oldpos-1)
+ NewSub
+ copy(TmpS,length(TmpS)-oldpos+1)
until (oldpos=0)

result:=TmpS
end;
 
C

CJ

Unregistered / Unconfirmed
GUEST, unregistred user!
临时写的,可能有错,不过思路因该如此
function replacestring(s,source,dest:String):string;
var
i:integer;

begin
for i:=1 to length(s) do
begin
if s = source then s := dest;
end;
replacestring := s;
end;
 
J

Jao

Unregistered / Unconfirmed
GUEST, unregistred user!
我来总结:
1)、以数组方式处理本问题,逐个比对的方法,由于str这种方式只能替换掉
一个字符,所以不能适用于字串的替换,而只是字符替换;
2)、曹晓钢的方法是正确的,不论ordstr是什么,都可以正确的替换为newstr.
redforks的思路似乎也是这样,只是我不知道他的这个replace函数从哪里来的
同时以上各位的方法都有点繁琐,我最后的代是码是:

While Pos(OrdStr,Source)>0 do
Source := StringPlace(Source,OrdStr,NewStr,[]);
 
J

Jao

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
R

redforks

Unregistered / Unconfirmed
GUEST, unregistred user!
To Jao:
不好意思,replace是我工具库中的另外一个函数,我忘了他不是DELPHI的标准
函数。
replace函数的代码和说明如下:

function replace( const s,orgSubStr,destSubStr: String
var startIndex: integer ): String;
Replace an orgSubStr to destSubStr in String s from StartIndex,
new Index is return by StartIndex, when Replace is take, StartIndex is length( s ) + 1
new String is Returned by Return Value


function replace( const s,orgSubStr,destSubStr: String
var startIndex: integer ): String;
var
subPositon: integer;
begin
result := s;
subPositon := Pos( orgSubStr,result );
if subPositon <> 0 then
begin
delete( result,subPositon,length( orgSubStr ) );
insert( destSubStr,result,subPositon );
Inc( startIndex,length(destsubStr ) );
end
else
startIndex := length( s ) + 1;
end;
 

Similar threads

S
回复
0
查看
947
SUNSTONE的Delphi笔记
S
S
回复
0
查看
768
SUNSTONE的Delphi笔记
S
顶部