首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CharInSet不能处理非英文字母吗?

CharInSet不能处理非英文字母吗?
EN

Stack Overflow用户
提问于 2010-11-21 18:12:49
回答 5查看 4.7K关注 0票数 16

我已经将一个应用程序从Delphi 2007更新到了Delphi 2010,一切都很好,只有一条语句编译得很好,但不能工作,它是:

代码语言:javascript
复制
If Edit1.Text[1] in ['S','س'] then 
  ShowMessage('Found')
else
  ShowMessage('Not Found')

但是,我知道在will中不会这样,所以我改成了CharInSet

代码语言:javascript
复制
If CharinSet(Edit1.Text[1],['S','س']) then
  ShowMessage('Found')
else
  ShowMessage('Not Found')

但当字符串为س时,它永远不起作用,但它总是适用于S,即使我强制转换edt1。使用AnsiChar的文本1它总是不能处理阿拉伯字母。

我做错了什么,或者这不是CharInSet的工作方式?或者这是CharinSet中的一个错误

更新:

我的好朋友Issam Ali提出了另一个解决方案,它运行得很好:

代码语言:javascript
复制
  If CharinSet(AnsiString(edt1.Text)[1],['S','س']) then
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-21 19:04:59

CharInSet对于255以上的字符无效。在您的情况下,您应该使用

代码语言:javascript
复制
  case C of
    'S','س' : ShowMessage('Found');
  end;
票数 17
EN

Stack Overflow用户

发布于 2010-11-22 22:25:03

这是因为set of char结构化类型(最多256个元素)根本不支持Unicode。也就是说,将发出在set构造函数中被截断的任何字符Ord(ch) > High(AnsiChar),并警告W1061有关将WideChar缩小到AnsiChar的信息。请看下面的测试用例:

代码语言:javascript
复制
  { naturally, fails, emits CharInSet() suggestion }
  Result := 'س' in ['S','س'];

  { fails because second argument is set of AnsiChar }
  Result := CharInSet(
    'س',
    ['S','س']
  );

  { workaround for WideChar in AnsiCharSet, fails }
  Result := WideStrUtils.InOpSet(
    'س',
    ['S','س']
  );

  { a syntactical workaround, which finally works }
  Result := WideStrUtils.InOpArray(
    'س',
    ['S','س']
  );

  if Result then
    ShowMessage('PASS')
  else
    ShowMessage('FAIL');
票数 3
EN

Stack Overflow用户

发布于 2010-11-22 22:58:22

此外。

集合被限制为256个元素的序数值。所以AnsiChar适合,而(Unicode)Char不适合。您可以使用CharInSet将Delphi的pre unicode版本移植到unicode版本。由于集合的限制,集合对于字符不再是非常有用的。

这背后的原因是集合是以位掩码的形式实现的。您可以自由地实现自己版本的set。例如:

代码语言:javascript
复制
type
  TSet<T> = class 
  public
    procedure Add(const AElem: T);
    function InSet(const AElem: T): Boolean;
  end;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4237339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档