字符串连接function问题!(100分)

  • 主题发起人 主题发起人 prtmon
  • 开始时间 开始时间
P

prtmon

Unregistered / Unconfirmed
GUEST, unregistred user!
不固定字符串参数,类似mysql里conact_ws的这个function.
达到这样的效果:
如:conact_ws(',','abc','def') 返回'abc,def'
conact_ws('.','255','255','0','2') 返回'255.255.0.2'
 
function TForm1.CoalitionStr(aFlag: Char
aLstStr: TStrings): String;
var
i: Integer;
str: String;
begin
for i :=0 to aLstStr.Count - 1 do
begin
str := str + aLstStr.Strings + aFlag;
end;
Result := LeftStr(str,length(str)-1);
end;

测试
procedure TForm1.Button1Click(Sender: TObject);
var
list: TStrings;
begin
list := TStringList.Create;
list.Add('1');
list.Add('2');
list.Add('3');
list.Add('4');
ShowMessage(CoalitionStr('.',list) ) ;
end;
 
首先感谢各位的解答,但是并没有达到我的最好的要求.
我要求调用function时,参数必须为字符串,而不能是其它类型.
需求:
conact_ws(split:string;str1,str2....string):string;
调用时直接conact_ws('分隔符','字符串1','字符串2',..)而不用再处理成TStringlist或者array of string
 
这对于 Delphi 来说有些困难。

参考 Format(const Format: string
const Args: array of const): string 函数,调用时多个 [ 和 ] 也没什么吧。
Join('分隔符', ['字符串1','字符串2',..])

或者,你的这种需求,一般来说传递的字符串不会太多,实在想要,你就写 10 个重载函数吧,参数分别为 2~11 个。

C# 这样的语言支持你的需求。
 
直接用format不就行了?

function conact_ws(fag:string
Strs: array of const):string;
var
i:integer;
str:string;
begin
i:=length(Strs);
str:='%s';
for i:=1 to length(strs)-1 do
str:=str+fag+'%s';
result:=format(str,strs);
end;

调用:conact_ws('.',['192','168','1','1'])
 
hs-kill 的方法最接近了,不同的语言支持的这种情况不一样,比如你说的mysql 是解释执行的sql语句, c语言也支持 printf('%xx',xxx,xx) 的格式,要求ide/编译器能够支持,实际上某次调用还是解析固定个参数了,delphi的就是array
 
s: TStrings;

conact_ws(s.CommaText);

这样就可以随意个字符串参数。
 
其实这也就是个对函数传递不定个数参数的问题,如何可以不定数量的向函数传递参数
 
可不可以将第二个及以后的参数整体转为 String ,再在函数中分解开,比如:
conact_ws('.','string1,string2,string3')
 
呵呵,看来这个问题还是有点难度的.
记得我们调用API function时,经常会有这种不定参数的API function出现,在我记忆中,好像delphi里也有过这样的function,只是我不记得具体是什么function了,要不倒可以去看一下delphi是如何构建这种结构的,如果我找到了此方法,会在此公布的,也请各位再想想有没有办法,再次感谢
 
不好意思,delphi7直接就有Concat这个function,他的定义如下
function Concat(s1 [, s2,..., sn]: string): string;
呵呵,解决.
 
不过在delphi7 system单元下竟然找不到此function的定义,帮助提示此function是由system定义的,奇怪,大家能不能帮找找.?
 
啊哦......孤若寡闻了........不过你看delphi的help里:
Using the plus (+) operator has the same effect on two strings as using the Concat function:
S := 'ABC' + 'DEF';
Tip:The plus operator is faster than Concat.

直接使用+的操作要比用Concat快哦

而且Concat也不能像你要求的那样达到几个字符串之间插入共同字符串的操作
所以你与其用Concat还不如用+操作
 
试了半天,还是没有搞清楚delphi里的conact()是如何定义参数的,其实我是想将conact()再扩展一下做其它用途的,现在参数不知道怎么定义,做不来了
 
后退
顶部