放分了!! 字符串问题?(50分)

  • 主题发起人 主题发起人 至尊王
  • 开始时间 开始时间

至尊王

Unregistered / Unconfirmed
GUEST, unregistred user!
对形如于字符串"http://www.sina.com/demo/demo.htm" 如何得到"demo.htm"??在线等待!!!
 
50太少了。
从后面取
 
var
S,re_str:string;
i:integer;
begin
S:='http://www.sina.com/demo/demo.htm'
for i:=length(s) down to 1 do
if s='/' then
re_str:=copy(i,length(s)-i,s);//re_str就是所要的结果
end;
 
查查这两个函数
pos
delete
 
明明很简单,却不愿意自己去做。

function GetFileName(s: string):string;
var
i,j: integer;
begin
j:=0;
for i:= 1 to length(s) do if s='/' then j:=i;
delete(s,1,j);
result := s;
end;
 
var
i:integer;
s:string;
begin
for i:=length(sss) downto 1 do
if copy(sss,i,1)='/' then
break;
s:=copy(sss,i+1,length(sss)-i);
end;
s就是了
 
用midstr函数可以!midstr("http://www.sina.com/demo/demo.htm",26,8);
 
一个一个取
 
这种情况无非是最后由".htm"构成。
代码如下:
//已调试通过。
var
s: Pchar;
b: string;
begin
s := 'http://www.sina.com/demo/demo.htm';
b := string(StrRSCan(s, '/'));
Delete(b, 1, 1);
ShowMessage(String(b));
 
注意用循环或其他方法速度太慢,还有Delete的效率要比Copy高。
 
效率和资源最佳的方案:
function FileNameOnly(const FullName): String;
var
I, N, M: Integer;
begin
M:= Length(FullName);
for I:= 1 to M do begin
N:= M - I + 1;
if FullName[N] = '/' then begin
SetLength(Result, I-1);
Move(FullName[N+1], Result[1], I-1);
Break;
end;
end;
if N = 1 then Result:= FullName;
end;
 
function OperatStr(str: String): string;
var
CurrOperStr: string;
begin
CurrOperStr:='/'+str;
while pos('/',CurrOperStr)<>0 do
begin
CurrOperStr:= Copy(CurrOperStr,(pos('/',CurrOperStr)+1),Length(CurrOperStr));
Result:= CurrOperStr;
end;
end;
 
此法最好!
function GetUrlShortName(url: string):string;
var
i,j: integer;
begin
j:=0;
for i:= 1 to length(url) do if url='/' then j:=i;
delete(url,1,j);
result := url;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s:='http://www.sina.com/demo/demo.htm';
s:=stringreplace(s,'://','',[]);
s:=stringreplace(s,'/','/',[rfReplaceAll]);
showmessage(extractfilename(s));
end;
 
哈,方法好多啦,我就不添乱啦
提供思路
先倒过来,再找一个/就可以取了,重新倒回来,

呵呵,不要砍我,
 
后退
顶部