寻:Split(AnsiString a,AnsiString b)函数
按 b 把 a分割返回一个字串数组,
如: r=Split("a1-a2-","-");
则:
r[0]="a1"
r[1]="a2"
r[2]=""
陈
孙斑主提供的:
extern PACKAGE int __fastcall ExtractStrings(
TSsysCharSet & Separators,TSysCharSet & WhiteSpace,
char *ss,TStrings *)
但邦助中找不到,但很好用:
上面漏写了一句:
TStringList* Split(AnsiString a,AnsiString b)
{
char *s, *t, c;
TStringList* Strings;
if (a.IsEmpty() || b.IsEmpty())
return NULL;
Strings = new TStringList;
for(s=(char*)a.c_str(); s&&*s; s=t) {
t = strstr(s, b.c_str());
if (t != NULL) {
c = *t; *t = 0;
Strings->Add(s);
*t = c; t += b.Length();
}
else
Strings->Add(s);
}
return Strings;
}
__fastcall TStrings* StrSplit(AnsiString Source,SplStr)
//把Source按分隔符SplStr分成多个字符串
//要求SplStr是一个字符.
//返回值是TStrings*,使用完毕应delete
{
AnsiString s;
int i;
TStrings ResList;
ResList =new TStringList;
s =Source;
i =S.Pos(SplStr);
while (i<> 0)
{
ResList->Add(S.SubString(1,i-1));
S=S.SubString(i+1,Length(S)-i);
i=S.Pos(SplStr);
}
ResList->Add(S);
Result=ResList;
}
void Split(char *s,char c,TStringList *ss)
{
TSysCharSet Separators,WhiteSpace;
Separators<<c;
ExtractStrings(Separators,WhiteSpace,s,ss);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *ss=new TStringList;
Split("a1-a2-",-,ss);
Memo1->Lines=ss;
delete ss;
}
// 但最后的一个空串不能得到