CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

一个奇怪的问题

楼主fly518(我要飞)2003-08-03 17:49:37 在 Delphi / VCL组件开发及应用 提问

下面有段程序,说能告诉我最后ls_a变量的值是多少,在delphi7下的一段程序  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  var  
          ls_t   ,   ls_a     :   string   ;  
          li_p   :   integer   ;  
  begin  
          ls_t   :=   '姓名:form';  
          li_p   :=   pos   ('form'   ,   ls_t   )   ;  
          ls_a   :=   leftStr(ls_t   ,li_p)   ;  
  end; 问题点数:100、回复次数:9Top

1 楼huojiehai(海天子)回复于 2003-08-03 17:58:29 得分 10

返回"姓名:f"是对的  
  你应这样写  
  ls_a   :=   leftStr(ls_t   ,li_p   -   1)   ;//不知是不是你要的效果Top

2 楼ljmanage(过客)回复于 2003-08-03 18:01:35 得分 0

如果你在后面没有使用该变量的话,会被优化掉的Top

3 楼ljmanage(过客)回复于 2003-08-03 18:04:18 得分 10

你想要结果是姓名:的话用  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
          ls_t   ,   ls_a     :   string   ;  
          li_p   :   integer   ;  
  begin  
          ls_t   :=   '姓名:form';  
          li_p   :=   pos   ('form'   ,   ls_t   )   ;  
          ls_a   :=   leftStr(ls_t   ,li_p-1)   ;  
          showmessage(ls_a);  
  end   ;Top

4 楼fly518(我要飞)回复于 2003-08-03 18:23:18 得分 0

我要的是:'姓名:',你们有没有实际运行过,看看结果就知道问题了,在pos运算的时候,汉字是2个字符,但是leftStr函数里汉字却是一个字符,所以运行得到的ls_a为:'姓名:for',怎么会这样啊Top

5 楼fly518(我要飞)回复于 2003-08-03 18:26:05 得分 0

我知道这句话有问题  
   
  ls_a   :=   leftStr(ls_t   ,li_p)    
  应该写为  
  ls_a   :=   leftStr(ls_t   ,li_p   -   1   )Top

6 楼killlaoli(菜鸟)回复于 2003-08-03 18:32:57 得分 30

看一下帮助就明白了  
  Description  
   
  LeftStr   returns   the   leading   characters   of   AText   up   to   a   length   of   ACount   characters.  
   
  Note: If   AText   is   an   AnsiString   and   the   current   locale   uses   multi-byte   characters,   LeftStr   may   return   more   than   ACount   bytes.   To   return   a   specific   number   of   bytes,   use   LeftBStr.  
   
  改成  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
          ls_t   ,   ls_a     :   string   ;  
          li_p   :   integer   ;  
  begin  
          ls_t   :=   '姓名:form';  
          li_p   :=   pos   ('form'   ,   ls_t   )   ;  
          ls_a   :=   leftBStr(ls_t   ,li_p   -   1)   ;  
          Caption   :=   ls_a;  
  end;Top

7 楼killlaoli(菜鸟)回复于 2003-08-03 18:37:33 得分 0

哦,sorry,这样应该更好  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
          ls_t   ,   ls_a     :   WideString   ;  
          li_p   :   integer   ;  
  begin  
          ls_t   :=   '姓名:form';  
          li_p   :=   pos   ('form'   ,   ls_t   )   ;  
          ls_a   :=   leftStr(ls_t   ,li_p   -   1)   ;  
          Caption   :=   ls_a;  
  end;Top

8 楼webflier(webflier)回复于 2003-08-03 18:59:35 得分 30

正如樓上所說的,leftstr在雙字節平臺環境下,針對AnsiString返回的字節數比實際的要多,可以用leftbstr代替,或者用WideString。Top

9 楼qianguob(不懂编程)回复于 2003-08-03 20:12:43 得分 20

直接这样不就可以了吗?  
   
  var  
          ls_t   ,   ls_a     :   WideString   ;  
          li_p   :   integer   ;  
  begin  
          ls_t   :=   '姓名:form';  
          li_p   :=   pos   ('form'   ,   ls_t   )   ;  
          ls_a   :=   copy(ls_t   ,1,li_p   -   1)   ;  
          showmessage(   ls_a);  
  end;Top

相关问题

  • 奇怪,奇怪
  • 奇怪,奇怪!
  • 奇怪奇怪???
  • 奇怪!奇怪
  • 奇怪奇怪...........?????...........
  • 奇怪!奇怪!真奇怪!!!
  • 奇怪奇怪真奇怪
  • 奇怪???奇怪??奇怪???
  • 奇怪奇怪真奇怪。
  • 奇怪奇怪奇怪................

关键词

  • ls
  • leftstr
  • li
  • 姓名
  • 问题
  • pos
  • integer
  • form
  • begin
  • var

得分解答快速导航

  • 帖主:fly518
  • huojiehai
  • ljmanage
  • killlaoli
  • webflier
  • qianguob

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo