有没有用于取词的算法(100分)

  • 主题发起人 千中元
  • 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
比如Delphi中,
Edit1 : Tedit;
Edit1.Text := "中国 中国人 长江 长城 革命"
在每个词语的任意位置双击,比如"中国"的"中"和"国"之间,"中国人"的"中"与"国","国"与"人"之间,都可以取出当前的词语(不考虑重复
的词语问题,比如edit1.text中有两个"革命").
在OnDblClick中,Edit1.SelText只是一个单独的字.
 
用selstart;
setlength := 3;
就行了
 
老千是不是要实现下面的功能?
但是“(不考虑重复的词语问题,比如edit1.text中有两个"革命").”没用看懂
下面的代码写的很粗糙,可以精简的

procedure TForm1.Edit1DblClick(Sender: TObject);
var
lSelStart: Integer;
realStart, realend: Integer;
i: Integer;
begin
lSelStart := Edit1.SelStart;
for i := lSelStartdo
wnto 0do
if Edit1.Text = ' ' then
break;
if i = -1 then
//处理前面没有空格的情况
i := 0;
realStart := i;
for i := lSelStart to Length(Edit1.Text) - 1do
if Edit1.Text = ' ' then
break;
if i = Length(Edit1.Text) then
//处理后面没有空格的情况
i := i + 1;
realend := i - 1;
Edit1.SelStart := realStart;
Edit1.SelLength := realend - realStart;
end;
 
多谢两位.白天上不了DFW,也没能收到邮件,
参考了trim函数的实现,写了下面的代码:
procedure TForm1.Edit1DblClick(Sender: TObject);
var
i,j ,L,x: integer;
sEdit : string;
result3 : string;

begin

i := Edit1.SelStart;
j := i;
x := i;
sEdit := trim(Edit1.Text);
L := length(sEdit);
i := i+1 ;

While (I <= L) and (sEdit >' ')do
Inc(I);
While(x >=0) and (sEdit[x] >' ')do
Dec(x);
result3 := copy(sEdit,x,i-x);
end;

 
多人接受答案了。
 
好久没有见到老千了,现在过的还好吧。
问候一声。
 
顶部