M61

 liuchen1206
今天参加了腾讯的现场招聘会,碰到这个一个题目:
在一篇英文文章中查找指定的人名,人名使用二十六个英文字母(可以是大写或小写)、空格以及两个通配符组成(*、?),通配符*表示零个或多个任意字母,通配符?表示一个任意字母。
如:J* Smi?? 可以匹配John Smith .

请用C语言实现如下函数:
void scan(const char* pszText, const char* pszName);
注:pszText为整个文章字符,pszName为要求匹配的英文名。
请完成些函数实现输出所有匹配的英文名,除了printf外,不能用第三方的库函数等。

上面这个题目是摘自http://blog.csdn.net/v_JULY_v的微软面试61题,虽然人家要求用c语言,咱也用Java做一下,虽然人家要求不能用第三方的库函数,咱也先用下java.util.regex.Pattern和java.util.Matcher。汗颜的是如果不是在Myeclipse环境下开发,断然不知道这两个类的包目录,如果不是百度了一下,把Java里的模式匹配都忘干净了。

package beauty;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class M61 {
 
 public void scan(String text,String name)
 {
  name = name.replaceAll("[?]","[a-zA-Z]");//?表示任意一个字母
  name = name.replaceAll("[*]", "[a-zA-Z]*");//*表示0个或多个字母
  name =name+" ?";//小心空格问题,使pattern以0个或一个空格结束
  Pattern pattern = Pattern.compile(name);
  Matcher match = pattern.matcher(text);
  
  while(match.find())
  {
   System.out.println(match.group());
  }
 }
 
 public static void main(String[] args)
 {
  M61 m61 = new M61();
  m61.scan("Jeck Smith,Jhoin Smith Jek Smidd", "J* Smi??");
  System.out.println();
   
 }
}

可以看出要用Java的Pattern和Matcher,还是要严格小心的。尤其在replace的时候,"[*]"而不能写"*",否则编译就Error了。至于不考虑用Java的Pattern和Matcher的方法呢,还没想出来呢。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值