现在有一字符串形式如下:(ab)b(abc)(bc)c(abc)(ac)(abc)...或者更长
一对括号代表一位,没有括号的那个数也做为一位.现在把它分解,毎一位取出一个数,如取出a b a b c a a a 做为一字符串,把毎位的数全部取完,取出生成的字符串唯一的.请问合位有什么好的方法速度上快点.
现在想到可以这样拆分可快点:ab(abc)b(abc)(bc)c(abc)(ac)(abc)
bb(abc)b(abc)(bc)c(abc)(ac)(abc)
如此类推把下面的括号里的数分拆.
我想还有没更快的方法?请各位高手指点;
一对括号代表一位,没有括号的那个数也做为一位.现在把它分解,毎一位取出一个数,如取出a b a b c a a a 做为一字符串,把毎位的数全部取完,取出生成的字符串唯一的.请问合位有什么好的方法速度上快点.
现在想到可以这样拆分可快点:ab(abc)b(abc)(bc)c(abc)(ac)(abc)
bb(abc)b(abc)(bc)c(abc)(ac)(abc)
如此类推把下面的括号里的数分拆.
我想还有没更快的方法?请各位高手指点;
解决方案 »
- 为什么我已经在Uses中增加了Types单元,还是会出现:Undeclared identifier: 'IStream'
- 当dll中的函数返回类型为Tstrings 时,程序调用内存出错,如何解决?
- 怎样读取十六进制文件???
- 请问如何更改从文件load的TADOQuery对象的字段内容
- windows2000也淘汰??
- 关于DELPHI调用动态连接库的问题!
- 在com/dcom对像调用的时候,客户端通过proxy(代理)和stup(请问这个是什么意思?)调用远程com对像。
- 数据库连接失败和超时问题
- 怎样用一个系统中不存在的用户名(未知)的用户名启动其它程序
- 熟悉窗体设计的大虾请指教!!
- DBChart 问题
- 求:这样的报表统计设计问题!
var
mStr, mStr2: String;
mStrList: TStringList;
i: Integer;
begin
mStr := '(ab)b(abc)(bc)c(abc)(ac)(abc)';
try
mStrList := TStringList.Create;
SplitStr(mStr, mStrList);
if mStrList.Count = 0 then exit;
mStr2 := '';
for i := 0 to mStrList.Count - 1 do
mStr2 := mStr2 + mStrList[i];
Memo1.Text := mStr2;
finally
FreeAndNil(mStrList);
end;
end;procedure TForm1.SplitStr(const ABeforeStr: string; var AAfterList: TStringList);
var
mPos, mPos1, mPos2: Integer;
mStr, mTmStr, mStr1: String;
begin
mStr := ABeforeStr;
mPos := 0;
while (mStr <> '') do
begin
mPos1 := Pos('(', mStr);
mPos2 := Pos(')', mStr);
if (mPos1 = 0) and (mPos2 = 0) then continue
else if (mPos1 = 0) and (mPos2 <> 0) then mPos := mPos2
else if (mPos2 = 0) and (mPos1 <> 0) then mPos := mPos1
else if mPos1 < mPos2 then mPos := mPos1
else if mPos1 >= mPos2 then mPos := mPos2;
mStr1 := Copy(mStr, 1, mPos - 1);
if mStr1 <> '' then AAfterList.Add(mStr1[1]);
mTmStr := mStr;
Delete(mTmStr, 1, Length(mStr1 + '('));
mStr := mTmStr;
end;
end;
可能你是误解了我的意思.你只是把括号里的字符取出来了.然后和起来,并没有作我据说的分解字符. 还是很多谢你这么专心的帮我解答.
-> 那问题是不是可以转化为 ()内 或者()外的字符串是否有重复的??不明处:
()内,()外一次选取多少位,0, 1,还是多位? ....还是必须要选请描述清楚