首页
社区
课程
招聘
题目:Delphi Memo控件中内容处理[]?[注:已经自行解决]
发表于: 2004-12-8 21:56 8161

题目:Delphi Memo控件中内容处理[]?[注:已经自行解决]

2004-12-8 21:56
8161
题目:Delphi Memo控件中处理[请按要求帮忙]?

题目要求如下:

控件组成:Form1,Memo1,Memo2,Button1(Button1是“处理”按钮)

Memo1输入(粘贴)内容如下:

0040150C   . E8 33030000    CALL <JMP.&MFC42.#3874>
00401511   . 8B07           MOV EAX,DWORD PTR DS:[EDI]               ;  //ECX出现输入的"Serial"
00401513   . 8038 36        CMP BYTE PTR DS:[EAX],36                 ;  //比较注册码第1个字符是否等于"6",否则出错
00401516   . 75 1E          JNZ SHORT COSH_2.00401536
00401518   . 8078 01 32     CMP BYTE PTR DS:[EAX+1],32               ;  //比较注册码第2个字符是否等于"2",否则出错
0040151C   . 75 18          JNZ SHORT COSH_2.00401536
0040151E   . 8078 02 38     CMP BYTE PTR DS:[EAX+2],38               ;  //比较注册码第3个字符是否等于"8",否则出错
00401522   . 75 12          JNZ SHORT COSH_2.00401536
00401524   . 8078 03 37     CMP BYTE PTR DS:[EAX+3],37               ;  //比较注册码第4个字符是否等于"7",否则出错
00401528   . 75 0C          JNZ SHORT COSH_2.00401536
0040152A   . 8078 04 2D     CMP BYTE PTR DS:[EAX+4],2D               ;  //比较注册码第5个字符是否等于"-",否则出错
0040152E   . 75 06          JNZ SHORT COSH_2.00401536
00401530   . 8078 05 41     CMP BYTE PTR DS:[EAX+5],41               ;  //比较注册码第1个字符是否等于"6",否则出错
00401534     74 17          JE SHORT COSH_2.0040154D                 ;  ****关键跳转,只要上面不出错就会成功!*****

要求进行“处理”,保留有下面规定的字符:

'0'..'9','a'..'z','A'..'Z',' ',',','+','-','*','.','[',']','(',')','/',';'

其它字符忽略或删去

结果输出到 Memo2

请给出 Delphi 7 的编程方法(具体过程即是“处理”按钮 Button1的处理过程,包括定义变量到过程过程结束),先不论方法优劣,成功就可以了,或者我先前没法将目的说清楚,大家不知怎么答复我,希望大家继续指点我... thanks!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 211
活跃值: (85)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
土方法,代码应该还可以再优化...
for i:=0 to memo1.lines.count-1 do
begin
  s:=Memo1.Lines.Strings[i];
    for i1:=0 to length(s)-1 do
      begin
        if s[i1]='你期待的内容' then  Memo2.Lines.Add(s[i1]);            
      end;
end
2004-12-8 22:36
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
3
最初由 leozem 发布
土方法,代码应该还可以再优化...
for i:=0 to memo1.lines.count-1 do
begin
s:=Memo1.Lines.Strings;
for i1:=0 to length(s)-1 do
........


leozem 你好,我的意思你好像不明白,你给出的 s 是什么类型,好像经过 Memo1.Lines.Strings[i]是什么 pasi之类的数据类型,我是想你介绍怎么将一行中的 AsciII 码,按逐一字节访问,比如 m[il]是一个字节类型(定义为什么类型比较好?),我想你教教怎么向它循环赋值,用
if (m[il] in [0..9,....,]) then
begin
...
end;
2004-12-9 20:32
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
4
这条题目真的那么难?最衰我 Delphi 的基础唔系好:(
2004-12-10 22:46
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
s是string,delphi中string实际是个数组,所以楼上的这个循环
for i1:=0 to length(s)-1 do
实际上就是从头至尾访问s的每一个字符(char)
2004-12-11 14:33
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
6
heng9ml
那题目如果是你做,请放出“编程过程”,光说不写,那是不一回事的,我就是因为类型问题我无法解决,还被编译器刁难...到底如果做才能达到题目的目的
2004-12-11 21:02
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
7
leozem的代码大致正确。heng9ml的解说是对的。

但是请注意,string中第一个字符的数组下标是1,不是0

所以for i1:=1 to length(s) do
2004-12-11 22:44
0
游客
登录 | 注册 方可回帖
返回
//