您的位置:首页 > 编程语言 > Delphi

根据输入数字串,返回连续的数字组合,比如输入“1,2,3,5,6,9”返回“1-3;5-6;9” Delphi6实现(方法2)

2013-06-04 10:16 393 查看
这个方法跟上一个方法相比会消耗一些效率,还需要起始数和结束数,但不受其他字符、重复、顺序干扰。具体如下:

{-------------------------------------------------------------------------------
过程名: TSerialNumberDemo.OutputSearialNum 方法二
作者: Administrator
日期: 2013.06
参数: ASource: string
返回值: string
用途: 根据输入的1,2,4,5,6,11,13,14返回1-2;4-6;11;13-14
-------------------------------------------------------------------------------}
function TSerialNumberDemo.OutputSearialNum(ASource: string; AMin,
AMax: Integer): string;
var
v_Start: Integer;
v_End: Integer;
v_Index: Integer;
v_TmpList: TStringList;
v_ResList: TStringList;
v_ResStr: string;
begin
if trim(ASource) = EmptyStr then
begin
Result := '无';
Exit;
end;
v_TmpList := TStringList.Create;
v_ResList := TStringList.Create;
try
v_TmpList.CommaText := ASource;
v_Start := -1;
v_End := -1;
for v_Index := AMin to AMax do
begin
if v_TmpList.IndexOf(IntToStr(v_Index)) >= 0 then
begin
if v_Start = -1 then
begin
v_Start := v_Index; //“-前的值”
end else
if (v_TmpList.IndexOf(IntToStr(v_Index + 1)) < 0) and (v_Start < AMax) or (v_Index = AMax) then
begin
v_End := v_Index; //此处后面不连续,保存为“-后的值”
v_ResList.Add(IntToStr(v_Start));
v_ResList.Add('-');
v_ResList.Add(IntToStr(v_End));
v_ResList.Add(';');
v_Start := -1;
end;
end else
begin
if v_Start <> -1 then
begin
v_ResList.Add(IntToStr(v_Start));
v_ResList.Add(';');
v_Start := -1;
end;
end;
if v_Start = AMax then
begin
v_ResList.Add(IntToStr(v_Start));
v_ResList.Add(';');
end;
end;
v_ResStr := EmptyStr;
for v_Index := 0 to v_ResList.Count - 1 do
begin
v_ResStr := v_ResStr + v_ResList[v_Index];
end;
Result := v_ResStr;
finally
v_TmpList.Free;
v_ResList.Free;
end;
end;

procedure TSerialNumberDemo.btnTest2Click(Sender: TObject);
begin
ShowMessage(Self.OutputSearialNum(edtInputNumStr.Text, 1, 100));//测试
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐