由于我要对字符串进行进一步的处理。所以求教能实现Pos函数一样功能的代码。谢谢!
解决方案 »
- reportmachine 颜色
- 谁能介绍一下:有没有与Word兼容比较好的控件(For Delphi)?
- 请问如何可以象WORD一样打印缩放字体(瘦长型或扁型)???
- 怎样解决在2000/98下设计的窗体到了98/2000下后字体变的很难看的问题!
- floattostr()怎么不是按原来的转换啊!!拜托大家帮忙看看!
- adoconnection如何像asp里边那样使用server.mappath的方法?郁闷.
- 泛泛的问一个问题。(欢迎讨论。)
- 请问onkeypress 事件 和 onkeydown事件 的差别
- 我在公司为公司做一个安装,可遇到了三个难题,兄弟们帮帮我吧。不然我惨了。
- 在中国,像程序员这样搞技术的,有没有前途?还是都去做市场?
- 高分求教
- 问一个很简单的问题
procedure _Pos{ substr : ShortString; s : ShortString ) : Integer};
asm
{ ->EAX Pointer to substr }
{ EDX Pointer to string }
{ <-EAX Position of substr in s or 0 } PUSH EBX
PUSH ESI
PUSH EDI MOV ESI,EAX { Point ESI to substr }
MOV EDI,EDX { Point EDI to s } XOR ECX,ECX { ECX = Length(s) }
MOV CL,[EDI]
INC EDI { Point EDI to first char of s } PUSH EDI { remember s position to calculate index } XOR EDX,EDX { EDX = Length(substr) }
MOV DL,[ESI]
INC ESI { Point ESI to first char of substr } DEC EDX { EDX = Length(substr) - 1 }
JS @@fail { < 0 ? return 0 }
MOV AL,[ESI] { AL = first char of substr }
INC ESI { Point ESI to 2'nd char of substr } SUB ECX,EDX { #positions in s to look at }
{ = Length(s) - Length(substr) + 1 }
JLE @@fail
@@loop:
REPNE SCASB
JNE @@fail
MOV EBX,ECX { save outer loop counter }
PUSH ESI { save outer loop substr pointer }
PUSH EDI { save outer loop s pointer } MOV ECX,EDX
REPE CMPSB
POP EDI { restore outer loop s pointer }
POP ESI { restore outer loop substr pointer }
JE @@found
MOV ECX,EBX { restore outer loop counter }
JMP @@loop@@fail:
POP EDX { get rid of saved s pointer }
XOR EAX,EAX
JMP @@exit@@found:
POP EDX { restore pointer to first char of s }
MOV EAX,EDI { EDI points of char after match }
SUB EAX,EDX { the difference is the correct index }
@@exit:
POP EDI
POP ESI
POP EBX
end;
接分!