马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
写这个是因为我看到了小甲鱼老师的《零基础入门学习delphi》的第22讲冒泡排序V2.0,冒泡排序算法,插入排序算法,相信各位鱼油肯定是了如指掌,我要说的是这里面是如何从Edit控件里面text字符串里面的数字把它提取出来。
我真的花了两三天的时间来研究这个实现过程,源代码几乎很视频中一模一样,用message显示就行,可就是偏偏把它赋值到外部的动态数组时出了问题,后来郁闷了好一段时间,后来用变量观察器调试的时候发现动态数组一直没反应,最后的发现的问题,其实也很简单,就是我把setlength(shuzu,length(str))过程写在了str被赋值的语句之前,str都没东西,length(x)能有东西? 所以语法没有错误,编译器也不报错。我那个郁闷啊,犯了一个逻辑错误
本程序有个亮点就是可以提取任何你想要提取的字符串同一个字符串,比如 "wewSDw34t;'.[234wo我是聪332;‘【】=-、地432"是不是看着很复杂,这个时候可以用 in 这个东西,具体什么东西没研究,我理解的就是包容,属于的意思吧(跟数学集合差不多) 在判断单个字符的时候直接判断他是不是属于0-9这是个数字就可以提取数字,判断是否属于a-z就可以提取小写字母,A-Z就可以提取大写的发挥你的想象,所以几乎是万能的
对于大神来说这可能没什么,但是对于我这种菜鸟,有这种成就,小有欢喜,所以我会上论坛发帖子,分享给大家
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
x , temp:String;
shuzu:array of Integer;
i , j:Integer; //循环控制
begin
x:=Trim(Edit1.Text); //删除text字符串两边讨厌的空格
SetLength(shuzu,length(x)); //定义动态数组的长度
i := 1;
j := 0;
while( i < Length(x) + 1 ) do
begin
temp := ''; //循环开始时先清零
while( x[i] in ['0'..'9'] ) do //这是本程序的亮点,只要不属于0-9这个数字集合的统统杀掉
begin
temp := temp + x[i];
i := i + 1;
end;
while not (temp = '') do //本已经清零,现在临时字符串不为空那么提取到数组
begin
shuzu[j] := StrToInt(temp); //赋值
j := j + 1;
temp := '';
end;
i := i + 1;
end;
SetLength(shuzu,j); //按需要更改多余的动态数组占用空间,舍弃排在后面的部分
Edit2.Text:='';
for i:=0 to j-1 do
Edit2.Text:=Edit2.Text+IntToStr(shuzu[i])+';';
Edit2.Text:=copy(Edit2.Text,1,length(Edit2.Text)-1);
showmessage(IntToStr(length(shuzu)));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.ShowHint := true;
Edit2.ShowHint := true;
Edit1.Hint := '请输入需要处理的字符';
Edit2.Hint := '这里是结果的返回区域';
end;
end.
|