问题描述
今天参加了腾讯的现场招聘会,碰到这个一个题目:在一篇英文文章中查找指定的人名,人名使用二十六个英文字母(可以是大写或小写)、空格以及两个通配符组成(*、?),通配符“*”表示零个或多个任意字母,通配符“?”表示一个任意字母。如:“J*Smi??”可以匹配“JohnSmith”.请用C语言实现如下函数:voidscan(constchar*pszText,constchar*pszName);注:pszText为整个文章字符,pszName为要求匹配的英文名。请完成些函数实现输出所有匹配的英文名,除了printf外,不能用第三方的库函数等。当时现场在纸上写了下,也不知道写得对不,感觉没有个好的思路。现请论坛里的大虾们帮忙提供一下好思路方法,若有代码最好,谢谢!
解决方案
解决方案二:
呵呵,沙发!用正则表达式处理比较简单噶
解决方案三:
只会循环字符串,逐个查找满足表达式的字符
解决方案四:
相当于自己实现通配符,有星号的地方就比较其边界,问号除了边界还要注意数量。星号问号相连的话,就相当于是至少有同问号数量个字母的星号。
解决方案五:
名字都第一字母大写先把像名字的抽出来,然后比对
解决方案六:
不错,很好好,很强大
解决方案七:
该回复于2011-03-15 13:38:50被版主删除
解决方案八:
用正则表达式吧
解决方案九:
引用3楼dracularking的回复:
相当于自己实现通配符,有星号的地方就比较其边界,问号除了边界还要注意数量。星号问号相连的话,就相当于是至少有同问号数量个字母的星号。
不错的思路~~暂时还没有更好的想法~~
解决方案十:
引用8楼zn85600301的回复:
引用3楼dracularking的回复:相当于自己实现通配符,有星号的地方就比较其边界,问号除了边界还要注意数量。星号问号相连的话,就相当于是至少有同问号数量个字母的星号。不错的思路~~暂时还没有更好的想法~~
自己写正则引擎???
时间: 2024-12-21 01:57:33