Delphi System.Insert -从指定位置开始,将子字符串插入字符串(或将动态数组插入动态数组)
Delphi System.Insert -从指定位置开始,将子字符串插入字符串(或将动态数组插入动态数组)
原型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | procedure _Insert { source : ShortString; var s : openstring; index : Integer } ; asm { ->EAX Pointer to source string } { EDX Pointer to destination string } { ECX Length of destination string } { [ESP+4] Index } PUSH EBX PUSH ESI PUSH EDI PUSH ECX MOV ECX,[ESP+ 16 + 4 ] SUB ESP, 512 { VAR buf: ARRAY [0..511] of Char } MOV EBX,EDX { save pointer to s for later } MOV ESI,EDX XOR EDX,EDX MOV DL,[ESI] INC ESI { limit index to [1 .. Length(s)+1] } INC EDX TEST ECX,ECX JLE @@smallInx CMP ECX,EDX JG @@bigInx @@cont1: DEC EDX { EDX = Length(s) } { EAX = Pointer to src } { ESI = EBX = Pointer to s } { ECX = Index } { copy index-1 chars from s to buf } MOV EDI,ESP DEC ECX SUB EDX,ECX { EDX = remaining length of s } REP MOVSB { copy Length(src) chars from src to buf } XCHG EAX,ESI { save pointer into s, point ESI to src } MOV CL,[ESI] { ECX = Length(src) (ECX was zero after rep) } INC ESI REP MOVSB { copy remaining chars of s to buf } MOV ESI,EAX { restore pointer into s } MOV ECX,EDX { copy remaining bytes of s } REP MOVSB { calculate total chars in buf } SUB EDI,ESP { length = bufPtr - buf } MOV ECX,[ESP+ 512 ] { ECX = Min(length, destLength) } { MOV ECX,[EBP-16] } { ECX = Min(length, destLength) } CMP ECX,EDI JB @@ 1 MOV ECX,EDI @@ 1 : MOV EDI,EBX { Point EDI to s } MOV ESI,ESP { Point ESI to buf } MOV [EDI],CL { Store length in s } INC EDI REP MOVSB { Copy length chars to s } JMP @@exit @@smallInx: MOV ECX, 1 JMP @@cont1 @@bigInx: MOV ECX,EDX JMP @@cont1 @@exit: ADD ESP, 512 + 4 POP EDI POP ESI POP EBX RET 4 end ; |
Delphi:
1 2 3 4 5 | procedure Insert( Substr: String ; //要插入的字符串 var Dest: String ; //源字符串 Index: Integer //从第几个字符前开始插入 ); |
XE:
1 2 3 4 5 | procedure Insert( Source: < string or dynamic array >; //支持动态数组 var Dest: < string or dynamic array >; Index: Integer ); |
示例1:
1 2 3 4 5 6 7 8 | var s,InStr: string ; begin s:= 'Hello TaoRoy' ; InStr:= ',I am ' ; System . Insert(InStr,s, 7 ); ShowMessage(s); //Hello ,I am TaoRoy end ; |
示例2:(XE)
1 2 3 4 5 6 7 8 | var A: array of integer ; begin ... A:=[ 1 , 2 , 3 , 4 , 5 ]; Insert( 6 ,A, 2 ); // A 的值: [1,2,6,3,4,5] ... end ; |
创建时间:2022.07.13 更新时间:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2021-07-13 Delphi 事件OnCanResize、OnConstrainedResize、OnResize
2020-07-13 Delphi 错误提示: Unknown picture file extension (.jpg)