用POS()函数查找汉字的问题,急!(50分)

  • 主题发起人 主题发起人 xinfengzhou
  • 开始时间 开始时间
X

xinfengzhou

Unregistered / Unconfirmed
GUEST, unregistred user!
我运行下列过程,得到了意外结果
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=pos('切','记型号');
showmessage(inttostr(i));
end;
结果如下:i为2,而理论上应为0。
要正确的查找汉字应该如何实现,请各位大侠赐教!!!
 
一个汉字是2个字节,能用pos()吗?
怎么变换?
关注!
 
var i:integer;
s1,s2:string;
sub,s:widestring;
begin
s1:='切';
s2:='记型号';
i:=pos(s1,s2);
showmessage(inttostr(i));
没问题
 
应该可以用widestring类型来解决这个问题
 
to ugvanxk:楼上的方法似乎不行啊
 
使用WideString
WideString将中文及英文均认为是同一长度的字符
 
用copy吧,一次copy两位比较字符串,可能麻烦一点。
 
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
s1,s2:widestring;
begin
s1:='切';
s2:='记型号';
i:=pos(s1,s2);
showmessage(inttostr(i));
这样就行了
 
写错了,
赋值sub,s:widestring 就可以了
 
很有意思!
s1:='切';
s2:='记型号';
t1:=s1[1];
t2:=s1[2];
t3:=s2[2];
t4:=s2[3];
ord(t1)=ord(t3)
ord(t2)=ord(t4)
因此出现i=2的情况!
避免办法有二如上。



 
记的右半部份加上型的左半部份刚好是个切字
所以会出错
换成下面的语句就不会有这样的问题了:
i:=pos(WideString('切'),WideString('记型号'));
showmessage(inttostr(i));
 
学习一下。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部