type
  TChn = array[1..27] of string;

const
  ChnA = '啊阿呵吖锕嗄腌爱矮挨哎碍癌艾唉哀蔼隘埃皑呆捱嗳嫒瑷暧砹锿霭嗌袄凹傲奥'+
         '熬懊敖翱澳嚣坳嗷岙廒遨媪骜獒聱螯鏊鳌鏖拗按安暗岸俺案鞍氨胺谙埯揞犴庵'+
         '桉铵鹌黯'#163#193#163#225+'Aa';

ChnB = '捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮'+
         '拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥薄雹保堡饱宝抱报暴豹鲍'+
         '爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖'+
         '蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋'+
         '别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤'+
         '泊驳捕卜哺补埠不布步簿部怖'#163#194#163#226+'Bb';

...

Chn: TChn =
    (ChnA, ChnB, ChnC, ChnD, ChnE, ChnF, ChnG, ChnH, ChnI,
     ChnJ, ChnK, ChnL, ChnM, ChnN, ChnO, ChnP, ChnQ, ChnR,
     ChnS, ChnT, ChnU, ChnV, ChnW, ChnX, ChnY, ChnZ, Chn27);

function IsMBCSChar(const ch: Char): Boolean;
begin
Result := ord(ch) >127;//ByteType(ch, 1) <> mbSingleByte;
end;

function PYinChinese(ChnStr, InputStr: string): Boolean;

var
  P, Q: PChar;
  ID, IP: Integer;
  Dt: string;
  asterisk: Boolean;

function GetChinesePYID: Integer;
  begin
    case P^ of
      'a'..'z': Result := ord(P^) - ord('a') + 1;
      'A'..'Z': Result := ord(P^) - ord('A') + 1;
      '0'..'9': Result := 27;
      '*': Result := 28;
      '?': Result := 29;

else
        if IsMBCSChar(P^) then
          Result := 0
        else
          Result := -1;
    end;

end;

begin
  InputStr := UpperCase(InputStr) + #0;
  ChnStr := UpperCase(ChnStr) + #0;
  P := Pointer(InputStr);
  Q := Pointer(ChnStr);
  Result := False;
  MH := False;

while (P^ <> #0) and (Q^ <> #0) do
  begin

ID := GetChinesePYID;
    case ID of
      1..26:
        if not asterisk  then
        begin    //待查的串
          Dt := Q^;
          Result := Pos(Dt, CHN[ID]) > 0;
          Inc(P);
          Inc(Q);
        end
        else  //匹配星号
        begin
          Result := False;
          while (Result = False) and (Q^ <> #0) do
          begin
            Dt := Q^;
            Result := Pos(Dt, CHN[ID]) > 0;
            Inc(Q);
          end;

asterisk := False;
          Inc(P);
        end;
      28: begin
            Result := True;
            asterisk := True;
            Inc(P);
          end;
      29: begin
            Result := True;
            Inc(P);
            Inc(Q);
          end;
      0: begin
           if asterisk then
           begin
             Dt := Q;
             IP := Pos(P^, Dt);
             Result := IP > 0;
             Inc(P);
             Inc(Q, IP);
             asterisk := False;
           end
           else
           begin
             Dt := Q;
             Result := Pos(P^, Dt) = 1;
             Inc(P);
             Inc(Q);

end;
         end;
      -1: Result := False;
    end;

if Result = False then Exit;
  end;
  if (P^ <> #0) and Result then Result := False;

end;

使用方法

var

AChstr: TStringList;

AChStr.Add('国际银行家');

AChStr.Add('过滤字符串');

...

找出包含  ‘*gj’   或   (*国际) 或  (*g际)  的串

for I := 0  to AChStr.Count - 1 do

if  PYinChinese(AChStr[I], '*GJ') then

dosomething;

下面给出本人一个软件中的示例

一个利用拼音与汉字混合过滤字符串的函数相关推荐

  1. 一个效率更高的全半角字符串截取函数

    [原创,转载请注明:[url]http://wfyang.blog.51cto.com[/url]] 现在流传的那几个字符串截取函数,一般都是对字符串进行循环判断,如果要截取的串比较长,效率就成了一个 ...

  2. Csharp: 拼音转汉字字符搜索字符串

    1 /// <summary>
 /// 拼音检索
 /// </summary>
 /// <param name="strText">< ...

  3. php对中英文字符串进行截取,利用php怎么对中英文混合的字符串进行截取

    利用php怎么对中英文混合的字符串进行截取 发布时间:2021-01-04 15:31:24 来源:亿速云 阅读:103 作者:Leah 利用php怎么对中英文混合的字符串进行截取?很多新手对此不是很 ...

  4. solr入门之參考淘宝搜索提示功能优化拼音加汉字搜索功能

    首先看一下从淘宝输入搜索keyword获取到的一些数据信息: 第一张:使用拼音的全程来查询 能够看到提示的是匹配的转换的拼音的方式,看最后一个提示项 这里另一个在指定分类文件夹下搜索的功能,难道后台还 ...

  5. python字符串筛选输出_如何在Python中过滤字符串列表

    Python使用列表数据类型在顺序索引中存储多个数据.它的工作方式类似于其他编程语言的数字数组.filter()方法是Python的一种非常有用的方法.可以使用filter()方法从Python中的任 ...

  6. solr入门之参考淘宝搜索提示功能优化拼音加汉字搜索功能

    http://blog.csdn.net/sqh201030412/article/details/51211551 首先看一下从淘宝输入搜索关键字获取到的一些数据信息: 第一张:使用拼音的全程来查询 ...

  7. split函数python_Python字符串split函数知多少【Python每日一个知识点第75期】

    Python字符串操作是一名开发人员的基本功,求职面试往往也会通过字符串相关考题来考验开发者对于语言基础的掌握.Python字符串的分割操作更是考察重点,能否灵活运用split被视为开发人员对于Pyt ...

  8. 字符数组的用法及字符串处理函数的用法

    字符型数据是以字符的ASCII码存储在存储单元中的,一般占一个字节. 1.如何定义字符数组 char s[100]; 在字符数组中一个元素存放一个字符. 下面我们来说一下字符串处理函数的用法,在使用字 ...

  9. 字符串连接函数strcat

    <C++宝典>第6章数组与字符串,本章将介绍一种数据集合类型--数组.与结构体不同,数组是同一类型数据的集合.而且在内存中,数组中的元素依次排列,一个紧邻一个.本节为大家介绍字符串连接函数 ...

最新文章

  1. linux c获得时间和设置时间
  2. java中wait和notify的虚假唤醒问题
  3. 神经网络与机器学习 笔记—基本知识点(上)
  4. 《Effect Java》学习笔记1———创建和销毁对象
  5. 鸟哥的Linux私房菜(服务器)- 主机基本安全之一:限制 Linux 对外连线的端口
  6. 【数据结构与算法】之深入解析“组合总和II”的求解思路与算法示例
  7. php 离线 gis,在 Web 页面中使用离线地图
  8. javascript获取事件源对象和产生事件的对象
  9. 循环删除List集合的错误
  10. linux进程通讯-纯文本文件1
  11. struts工作原理(图解)
  12. js+面向对象相关笔记(六)
  13. Qt5学习笔记之计时器
  14. GNS3使用Docker
  15. qt在linux下编译资源文件,linux下Qt qrc文件的编写与应用
  16. 系统分析师考试大纲(2009版)
  17. python设计一个学生类姓名年龄成绩_C# 编写学生类Student,包含学生姓名,成绩,设计一个友员函数sortDegree(),将学生成绩按大到小排序。...
  18. 晶联讯1353显示屏测试程序
  19. 爱普生Epson LQ-680K 打印机驱动
  20. 制作ubuntu引导盘,到安装Ubuntu系统流程

热门文章

  1. pythonocc_pythonocc
  2. YOLOV3实现车牌检测
  3. F2FS nat entry涉及的数据结构(linux 5.18.11)
  4. Edge 比 Chrome 快 29%?外媒:别拿过时的标准说事
  5. sws_scale转yuv到rgb
  6. JS 判断客户端环境(以及如何区分QQ客户端和QQ浏览器)
  7. 2023王道数据结构考研习题汇总
  8. duolingo 多邻国 安卓版无法使用口语功能
  9. python 效率 算法_python – 算法(prob solve)实现最快的运行时间
  10. dropout 关于keep_prob