一个字符串拆分的问题

lirg8405 2009-11-30 10:31:54
//--------将字符串Str按mode拆分保存到List
void __fastcall Pub_StringToTStringList(String Str,String mode,TStringList *List)
{
long int num;
String tmp;
List->Clear();
if (Str == "")
{
return;
}
if (mode == "")
{
List->Add(Str);
return;
}
num = Str.Pos(mode);
while(num != 0)
{
tmp = Str.SubString(1,num-1);
List->Add(tmp);
Str.Delete(1,num+mode.Length()-1);
num = Str.Pos(mode);
}
List->Add(Str);
}
上面是我的代码,问一个有没有更好的算法完成拆分的工作呢,谢谢
...全文
169 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
绿色夹克衫 2009-12-02
  • 打赏
  • 举报
回复
不清除Delete是怎么实现的,如果是依次移位复制的话,那么Str.Delete(1,num+mode.Length()-1);
就是效率最低的地方,成了n^2的算法了,本来是O(n)的。建议记录上一次节点的位置,
然后SubString的时候从上个位置之后截取,虽然是O(n),但相当于读取了2遍字符串

如果有直接拆分的函数,最好直接使用,其实配合状态机,只需要读取1遍字符串就可以了!
wenzheng38 2009-12-02
  • 打赏
  • 举报
回复
你这里所谓的拆分是啥意思?
比如字符串abcbebdb,按字符b拆分为:a,c,e,d,null
如果是这样的话,有响应的类库函数strtok(char *src, char *pattn)
  • 打赏
  • 举报
回复
不需要Delete呀,用string::find可以从上一次的mode之后开始查找,不要每次从头开始,也就不用Delete了。
wood87654321 2009-11-30
  • 打赏
  • 举报
回复
谈到算法,先应自己去实现SubString

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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