根据输入数字串,返回连续的数字组合,比如输入“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;
{-------------------------------------------------------------------------------
过程名: 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;
相关文章推荐
- 根据输入数字串,返回连续的数字组合,比如输入“1,2,3,5,6,9”返回“1-3;5-6;9” Delphi6实现
- python实现输入数字的连续加减方法
- C# TextBox控件实现只能输入数字的方法
- 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
- 输入一个非负整数返回组成它的数字之和,用递归实现
- 基本字符串压缩 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
- 实现textBox只能输入数字的一种方法!
- 正则表达式实现匹配连续数字的方法
- 实现只能输入数字的input不用replace方法
- Ajax上传实现根据服务器端返回数据进行js处理的方法
- 实现DigitSum(n) 输入一个非负整数,返回组成它的数字之和
- 【c语言】递归实现,输入一个非负整数,返回组成它的数字之和
- VB6.0中,在一个TextBox里面只输入数字,不能输入其它,比如汉字,符号,英文的方法
- 不用递归方法实现斐波那契数列,输入数字n 将会输出该数列的第n个数字
- js实现文本框只允许输入数字并限制数字大小的方法
- 用c语言实现 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
- css实现连续的英文或数字自动换行的方法
- java 输入一个数字,反转输出这个数字的值(实现方法)
- 编写一个方法实现数字倒置并返回这个数字
- 文本框只能输入数字的实现方法(兼容IE火狐)