字符串怎么一次性截取后面的一部分

yurenjf 2003-08-20 07:32:39
比如'\\dfsdf\\dsf\\erwe\\abcde'.我想不用循环的方法就取到'abcde',请不要用:
str := '\\dfsdf\\dsf\\erwe\\abcde';
while (pos('\\',str)>0) do
str := copy(str,pos('\\',str)+2,length(str));
...全文
105 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yurenjf 2003-08-26
  • 打赏
  • 举报
回复
谢谢大家,不能让分浪费啦^_^
yurenjf 2003-08-23
  • 打赏
  • 举报
回复
过奖
wdsimon 2003-08-23
  • 打赏
  • 举报
回复
呵呵,楼主真的在挑战极限!
yurenjf 2003-08-23
  • 打赏
  • 举报
回复
对不起各位,我找到了更好的方法,是用函数:StrRScan(str,'\');只需一句即可,你们的方法太罗嗦了. ^_^
WLiu 2003-08-21
  • 打赏
  • 举报
回复
yurenjf(极限), huojiehai(海天子)提出的方法同样也适用于四段或者更多的啊,因为TStringList不是有一个Count的属性,你取的Count-1个不就是最后一个了吗?
DJ_KK 2003-08-21
  • 打赏
  • 举报
回复
学习
charles2118 2003-08-21
  • 打赏
  • 举报
回复
function athwart(Str:string):string;
var
ilength,i:integer;
temp:string;
begin
for i:=1 to ilength div 2 do
begin
temp:=str[i];
str[i]:=str[ilength+1-i];
str[ilength+1-i]:=temp[1];
end;
result:=str;
end;
上面写的太多了,简化一下,呵呵,忘了是用整除的了
charles2118 2003-08-21
  • 打赏
  • 举报
回复
我想了一种思路:
定义一个颠倒字符串的函数,
function athwart(Str:string):string;
var
ilength,i:integer;
temp:string;
begin
ilength:=length(str);
if ilength mod 2 = 0 then
begin
for i:=1 to ilength div 2 do
begin
temp:=str[i];
str[i]:=str[ilength+1-i];
str[ilength+1-i]:=temp[1];
end;
end
else
begin
for i:=1 to (ilength-1) div 2 do
begin
temp:=str[i];
str[i]:=str[ilength+1-i];
str[ilength+1-i]:=temp[1];
end;
end;
result:=str;
end;

然后在函数中
首先把原来的字符串颠倒,这样第一个“\\”就成了判断标志了
s:='\\dfsdf\\dsf\\erwe\\abcde';
conS:=athwart(s);
index:=pos('\\',conS);
firstStr:=copy(conS,index,index-1);
最后再颠倒以下,
youWantedStr:=athwart(firstStr);
这样的话,无论有几段,都成了第一段,就不用循环了!
lwk_hlj 2003-08-21
  • 打赏
  • 举报
回复
copy不就可以了吗?
你从后面取啊,一个就可以了
yurenjf 2003-08-21
  • 打赏
  • 举报
回复
谢谢大家给的意见,可是都有问题,因为串'\\dfsdf\\dsf\\erwe\\abcde';
并不一定就是四段.有可能'\\'的个数更多或者更少呢???
zxp2005 2003-08-20
  • 打赏
  • 举报
回复
//用于以指定的字符串分割源字符串
function SplitString(const Source: string; const Splitter: string = ';'): TStrings;
var
Index : Integer;
LastStr: string;
begin
Result := TStringlist.Create;
LastStr := Source;
Index := Pos(Splitter, LastStr);
while Index <> 0 do
begin
Result.Add(Copy(LastStr, 1, Index - 1));
LastStr := Copy(LastStr, Index + Length(Splitter), Length(LastStr));
Index := Pos(Splitter, LastStr);
end;
Result.Add(LastStr);
end;

用法:
str := '\\dfsdf\\dsf\\erwe\\abcde';
var StrList: TStrings;
StrList := SplitString(str,'\\');
Result:= StrList[4];//'abcde'
SuperSeventh 2003-08-20
  • 打赏
  • 举报
回复
厉害!!!!!
原来还可以这么做!
huojiehai 2003-08-20
  • 打赏
  • 举报
回复
我写一个
var
SL: TStringlist;
str: string;
begin
SL := TStringList.create;
try
str := '\\dfsdf\\dsf\\erwe\\abcde';
SL.text := StringReplace(Str, '\\', #13, [rfReplaceAll, rfIgnoreCase])
Showmessage(Sl[4]);
finally
SL.free;
end;
end;
jpyc 2003-08-20
  • 打赏
  • 举报
回复
你的方法不错呀,还要化简,楼主做事真认真。佩服!

循环中用pos配合copy/DELETE可以吗?
lxpbuaa 2003-08-20
  • 打赏
  • 举报
回复
假如知道需要截取的长度,可以使用RightStr。不过你这里似乎不知道也

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧