虽然没用过xe4,5等等,但是这段程序明显是有问题的! if p1[i-1] in [' ', 'a'..'z', '.', '中', '文', '。'] then s := 'in true'; 改为 if p1[i-1] in [' ', 'a'..'z', '.', '中', '文', '。'] then s := 'in true' else s := 'not in'; 你看看还是你那个结果不 [解决办法] 因为集合最多256个元素.而中文属于Unicode,所以字符集合只是ANSI的.
不过可以借助子界类型. if p^ in [' ', 'a'..'z', '.', '中', '文', '。'] then s := 'in true'; 改为 case p^ of ' ', 'a'..'z', '.', '中', '文', '。': s := 'in true'; end; [解决办法]
g103 103 in true o111 111 in true o111 111 in true d100 100 in true .46 46 in true 32 32 in true 有9 26377 not in 问238 38382 not in 题152 39064 not in
。2 12290 not in
procedure TForm1.Button1Click(Sender: TObject); var s: string; p1: PAnsiChar; p2: PwideChar; i,j:integer; Str1,Str2:String; begin Str1:= 'good. 有问题。'; j:=length(Str1) ; for I := 1 to j do begin Str2:=Copy(Str1,i,1) ; p1 := PAnsiChar(Str2); p2 := PWideChar(Str2); s := ''; if p1[0] in [' ', 'a'..'z', '.', '有', '问','题', '。'] then s := 'in true' else s := 'not in'; memo1.Lines.Add(p2[0] + Chr(9) +IntToStr(Ord(p1[0])) +' ' + IntToStr(Ord(p2[0])) + Chr(9) +' '+ s); end;