中文字符在集合中的判断有关问题
中文字符在集合中的判断问题
结果如下:
g 103 in true
o 111 in true
o 111 in true
d 100 in true
. 46 in true
32 in true
有 26377
问 38382
题 39064
。 12290
里面的中文字符用in怎么判断不出来?请问该如何处理?
------解决方案--------------------

主要问题是你的p:PChar 是PWideChar 而字符集 支持的PAnsiChar ,字符集里面的汉字会被截取前一个字符,就变成你是取了双字节和单字节去判断的,所以不对。 上面的代码我也只取了一半去判断的,显示的值是双字节的。
------解决方案--------------------
虽然没用过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;
------解决方案--------------------
procedure TForm1.btn1Click(Sender: TObject);
var
s: string;
p: PChar;
begin
p := PChar('good. 有问题。');
while p^ <> #0 do
begin
s := '';
if p^ in [' ', 'a'..'z', '.', '中', '文', '。'] then s := 'in true';
mmo1.Lines.Add(p^ + Chr(9) + IntToStr(Ord(p^)) + Chr(9) + s);
inc(p);
end;
end;
结果如下:
g 103 in true
o 111 in true
o 111 in true
d 100 in true
. 46 in true
32 in true
有 26377
问 38382
题 39064
。 12290
里面的中文字符用in怎么判断不出来?请问该如何处理?
------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
p1: PAnsiChar;
p2: PwideChar;
i,j:integer;
begin
p1 := PAnsiChar(AnsiString('good. 有问题。'));
p2 := PWideChar(AnsiString('good. 有问题。'));
j:=length('good. 有问题。') ;
s := '';
for i:=1 to j do
begin
if p1[i-1] in [' ', 'a'..'z', '.', '中', '文', '。'] then s := 'in true';
memo1.Lines.Add(p2[i-1] + Chr(9) + IntToStr(Ord(p2[i-1])) + Chr(9) + s);
end;
end;
主要问题是你的p:PChar 是PWideChar 而字符集 支持的PAnsiChar ,字符集里面的汉字会被截取前一个字符,就变成你是取了双字节和单字节去判断的,所以不对。 上面的代码我也只取了一半去判断的,显示的值是双字节的。
------解决方案--------------------
虽然没用过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;
------解决方案--------------------
g 103 103 in true
o 111 111 in true
o 111 111 in true
d 100 100 in true
. 46 46 in true
32 32 in true
有 9 26377 not in
问 238 38382 not in
题 152 39064 not in