我需要编写一个程序,它将浏览各种长度的字符串,并只选择那些使用我定义的集合中的符号(特别是日文字母)编写的程序.字符串将包含用不同语言(德语,法语,阿拉伯语,俄语,英语等)编写的单词.显然有大量可能的角色.我不知道使用哪种结构?我现在正在使用Delphi 7.任何人都可以建议如何编写这样的程序?
解决方法
显然,使用Delphi 2010会更好,因为delphi 7中的VCL不知道Unicode字符串.您可以在Delphi 7中使用WideString类型和WideChar类型,并且可以安装类似TNT Unicode组件的组件集来帮助您创建可以显示结果的用户界面.
对于非常大的集类型,请考虑使用像TBits这样的位数组.长度为65536的位数组将足以包含每个UTF-16代码点.检查Char X是否在Set Y中,基本上是:
function WideCharsInSet( wcstr:WideString; wcset:TBits):Boolean; var n:Integer; wc:WideChar; begin result := false; for n := 1 to Length(wcstr) do begin wc := wcstr[n]; if wcset[Ord(wc)] then result := true; end; end; procedure Demo; var wcset1:TBits; s:WideString; begin wcset1 := TBits.Create; try // 1157 - Hangul Korean codepoint I found with Char Map wcset1[1157] := true; // go get a string value s: s := WideChar(1157); // return true if at least one element in set wcset is found in string s: if WideCharsInSet(s,wcset1) then begin Application.MessageBox('Found it','found it',MB_OK); end; finally wcset1.Free; end; end;