一个奇怪的问题
下面有段程序,说能告诉我最后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



