请问这个有关字符串替换的问题该怎么较好的解决(急啊)?(50分)

  • 主题发起人 主题发起人 eulb
  • 开始时间 开始时间
E

eulb

Unregistered / Unconfirmed
GUEST, unregistred user!
如:
s:='#H##e##l#';
substr:='#';
newstr:='xxx';
要求把s中的substr替换成某个字符串,即s变成'xxH##e##lxxx',而不是用stringreplace
函数得到的'xxHxxxxexxxxlx',也就是说要严格匹配整个substr而非子串substr的第一个
字符请问有这方面的函数或源代码吗?
请不吝赐教,谢谢!
 
用pchar编程实现,从第一个字符开始
 
procedure TForm1.Button2Click(Sender: TObject);
var
s,s0,substr,newstr:string;
suc:boolean;
j:byte;
begin
s:='#H##e##l#';
substr:='#';
newstr:='xxx';
s0:='';
for j:=1 to length(s) do
if (s[j-1]<>substr) and (s[j+1]<>substr) and (s[j+1]<>substr) then
s0:=s0+newstr
else
s0:=s0+s[j];
showmessage(s0);
end;
 
对了,假如 'A###A' 按你的要求该替换成什么?
 
谢谢大家
我搞定了

function TForm1.FStrictStrReplace(const S, OldPattern, NewPattern: string): string;
var
SearchStr: string;
Offset, Len: Integer;
begin
SearchStr := S;
Result := '';

while SearchStr <> '' do
begin
Offset := AnsiPos(OldPattern, SearchStr);
if Offset = 0 then
begin
Result := Result + SearchStr;
Break;
end;
Result := Result + copy(SearchStr, 1, Offset - 1);

Len := 0;
while (pchar(SearchStr) + Offset - 1 + Len)^ = '#' do
Inc(Len);
if Len = Length(OldPattern) then
Result := Result + NewPattern
else
Result := Result + copy(SearchStr, offset, Len);
SearchStr := copy(SearchStr, Offset + Len, MaxInt);

end;
end;
 
多人接受答案了。
 
后退
顶部