上周六笔试的时候,有这么一道题目:
有一个共有10个15位身份证号码字符串组成的数组,现输入一个字符串,格式为"430124??090?174",其中?可随意在字符串中出现,可匹配0-9的任意数字,要求从数组中找出与之匹配的,然后输入来。
当时脑子一片混乱,竟然就想用正则表达式来做,而正则表达式在vb中又不会用,想来想去也只能用JavaScript来写了。记得代码如下:
1function matchedIDCard(str){
2    var matchArr=new Array();
3    var re=eval("/" + str.replace(/\?/g,"[0-9]"+ "/");
4    for(var i=0;i<arr.length;i++)  //arr即为身份证号码的数组
5        if(re.test(arr[i])matchArr.push(arr[i]);
6    return matchArr;
7}
                         
那天,刘公说其实这个能用特别简单的方式实现的,不过能懂得利用系统提供的一些功能来实现,也非常不错。
这几天使劲学习C#,终于能用C#写出更加简单的算法了:
 1using System;
 2
 3class IDCard
 4{
 5    public static int Main()
 6    {
 7        string[] IDCardNumber=new string[10];
 8        IDCardNumber[0]="430124198204241714";
 9        IDCardNumber[1]="430124198209181714";
10        IDCardNumber[2]="124124198202121714";
11        IDCardNumber[3]="254124198202231714";
12        IDCardNumber[4]="456124198205341714";
13        IDCardNumber[5]="831124198202241714";
14        IDCardNumber[6]="102124198205081714";
15        IDCardNumber[7]="410124198211031714";
16        IDCardNumber[8]="230124198212281714";
17        IDCardNumber[9]="120124198204081714";
18
19        Console.WriteLine("请输入需要查询的身份证号码(输入“end”结束查询):");
20        string ID=Console.ReadLine();
21        while(ID.ToLower()!="end")
22        {
23            Console.WriteLine("与之匹配的身份证号码如下:");
24            for(int i=0;i<IDCardNumber.Length;i++)
25            {
26                int j=0;
27                while(j<IDCardNumber[i].Length && (ID[j]==IDCardNumber[i][j] || ID[j]=='?')) j++;
28                if(j==IDCardNumber[i].Length)Console.WriteLine(IDCardNumber[i]);
29            }

30            Console.WriteLine("\n请输入需要查询的身份证号码(输入“end”结束查询):");
31            ID=Console.ReadLine();
32        }

33        return 0;
34        
35    }

36}

37
38
上面的身份证号码是18位的,不过整体算法的确挺简单的。
本来准备把这个小东西再传给那个单位,让他们见识我的学习能力,不过现在不用了,已经收到他们的聘用电话了。^_^!
posted on 2006-07-04 11:40  晓寒天  阅读(478)  评论(0)    收藏  举报