PCHAR类型提取子字符串,搞定立刻给分(100)

  • 主题发起人 主题发起人 robert168
  • 开始时间 开始时间
R

robert168

Unregistered / Unconfirmed
GUEST, unregistred user!
如果提取某个含中文字字符串A内的以B为开始的子字符串,我们用Ansistrpos(B,A)就行了。但我现在需要提取的是的是B位置前10位开始的子字符串,请问如何解决!是B位置往前10位,这之后的子字符串!本人结贴迅速,搞定立刻给分,谢谢!
 
大概是这样Copy(A, AnsiStrPos(A,B) - 10, MAXINT)
 
Ansistrpos返回的是一个pchar地址,那么只需这样就可以了,前提是你确定b往前10个字符是存在的,否则会内存访问出错。x:= pchar(integer(Ansistrpos(a,b))-10);
 
TO:CoolSlobAnsiStrPos(A,B) - 10应该是不能进行的,AnsiStrPos(A,B)返回值是PCHAR类型TO:ufo!integer(Ansistrpos(a,b),这是不能转换的,里面不止是数字啊,可能有中文或英文啊。
 
安全版本,测试通过procedure TForm_login.Button1Click(Sender: TObject);var a,b,x: pchar;begin a:= '123456789'; b:= '456'; x:= pchar(integer(Ansistrpos(a,b))-2); if integer(a)<= integer(x) then showmessage(x) else showmessage('地址超出');end;
 
晕,不管里面是什么,这个是对内存地址的转换,和内容无关。
 
这样说吧,integer(XX) 和 strtoint(xx) 是不一样的。integer(XX)仅仅是告诉编译器把xx作为数字运算。这里是对内存地址进行运算。下面的例子也是测试通过的var a,b,x: pchar;begin a:= '中国人民解放军'; b:= '解放'; x:= pchar(integer(Ansistrpos(a,b))-2); if integer(a)<= integer(x) then showmessage(x);end;
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部