字符串问题.(50分)

  • 主题发起人 主题发起人 freeyhy
  • 开始时间 开始时间
F

freeyhy

Unregistered / Unconfirmed
GUEST, unregistred user!
1.要求写一个函数getmidstr(),返回某string任意指定2个字母中的substring。如果指定的字母相同,则返回距离最远的两个相同字母之间的substring。如果只有一个字母则返回这个字母后的substring.都没有则返回string.
例如:getmidstr('wasdfghjkl','a','g'):=sdf;(这个功能已经实现).
getmidstr('wgasdfghjklg','g','g'):=asdfghjkl,而不是asdf.
2.delphi7的delete函数没有了?以前的dfw论坛里面看到过这个函数.
菜鸟一个,第一次发问,

 
1、可以在函数中加个wihel循环判断最后一个“指定字符”的位置
2、Delphi7中有delete(...,...,...)这个函数
 
function GetMidStr(const Str, s1, s2:string):string;
var p1, p2:integer;
begin
p1:=Pos(s1, Str);
if s1=s2 then
p2:=LastDelimiter(s1, Str)
else
p2:=Pos(s2, Str);
if p1+p2=0 then
Result:=Str //都没有则返回string
else
if p1*p2=0 then //只有一个字母
Result:=Copy(Str, Max(p1, p2)+1, MaxInt)
else
Result:=Copy(Str, p1+1, p2-p1-1);
end;
 
谁有更简单的方法,贴出来学习学习
 
Delete 函数是在 System 单元里的,可以这样调用:System.Delete(...);
 
xuhao1的算法需要修改,也就是说如果量个字符不同,但是第二个字符,出现在第一个字符前的情况。copy里面的count如果是-值那么返回是''哈哈哈。
 
问题要求不是很明朗,会派生出很多问题,如陈晨所述就是2个字符A,B有无顺序的问题。如果有顺序,那么只发现B怎么返回,是返回前边的还是后边的?如果没顺序,那么怎样返回两者之间的字符?要求返回距离最远的两个相同字母之间的substring怎么实现,以谁为基准?
 
to 陈晨
应该是这样
 
如果需要的结果象陈晨说的,应改为

function GetMidStr(const Str, s1, s2:string):string;
var p1, p2, tmp:integer;
begin
p1:=Pos(s1, Str);
if s1=s2 then
p2:=LastDelimiter(s1, Str)
else
p2:=Pos(s2, Str);
tmp:=p1;
p1:=Min(p1, p2);
p2:=Max(tmp, p2);
if p1+p2=0 then
Result:=Str //都没有则返回string
else
if p1*p2=0 then //只有一个字母
Result:=Copy(Str, p2+1, MaxInt)
else
Result:=Copy(Str, p1+1, p2-p1-1);
end;
 
问题解决了,关键是LastDelimiter函数没见过,呵呵!
 
后退
顶部