QQ号码分析器这个软件不知道大家用过没有,我现在要开发一个类似功能的程序,可是不知道用什么算法实现。我想到的是用正则表达式,可是写了很久的正则都不能完美实现。像AAA、AAAA这样的规则比较容易实现,(\d)\1\1就行了,可是像ABCD这样的规则就不知道怎么办了,如果用\d\d\d\d会把1111、1122这样的号也都选出来。除了以上难点,还有最难的情侣号和兄弟号,以及顺子号,也不知道如何实现,希望高人来赐教。
调试欢乐多
1234这种是比较难。以前写过。
http://topic.csdn.net/u/20100712/13/cd273eba-70fe-4046-b96e-994284461c12.html
(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0))+\d
http://www.qqtz.com/read-htm-tid-500304.html
麻烦大家看一下。1楼那个是匹配顺子号的。ABCD号只是代表4个不同的数字。并不是说A和B是连续数字。
例如匹配ABCBA这样的小回旋号,15751,49194等。AABB要能匹配1133、4499这样的,但是要让1111不能匹配到
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Collections;namespace ConsoleApplication1
{
class Program
{ public Program(string originalExcelName)
{
////And then rename it to 1.xls and save it to c drive.
//ws.SaveAs("c:\\1.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel9795, null, null, false, false, false, null, null, true);
} /// <summary>
/// 选择4个不同数字的号码
/// </summary>
/// <param name="unknown"></param>
/// <returns></returns>
public static string ChooseDifferent4(string unknown)
{
List<char> list = new List<char>();
char[] s = unknown.ToCharArray();
bool sign = true;
for (int i = 0; i < s.Length; i++)
{
for (int j = 0; j < list.Count; j++)
{
if (s[i] == list[j])
{
sign = false;
break;
}
}
if (!sign)
{
return "Error";
}
list.Add(s[i]);
}
return unknown;
} /// <summary>
/// 选择回旋号码
/// </summary>
/// <param name="unknown"></param>
/// <returns></returns>
public static string ChooseReverseNumber(string unknown)
{
if (unknown.Length % 2 != 1)
{
return "Illegal reverse number.";
} bool sign = true;
string s1 = unknown.Substring(0, unknown.Length / 2);
string s2 = unknown.Substring(unknown.Length / 2 + 1, unknown.Length / 2);
for (int i = 0; i < s1.Length; i++)
{
if (s1[i] != s2[s2.Length - i - 1])
{
sign = false;
}
}
if (sign)
return unknown;
else
return "error";
} //Unknown
public static string ChooseCouplesNumber()
{
return "";
} static void Main(string[] args)
{
Console.WriteLine(Program.ChooseDifferent4("7596"));
Console.WriteLine(Program.ChooseReverseNumber("12321"));
Console.WriteLine(Program.ChooseReverseNumber("1232145"));
Console.ReadLine();
}
}
}
Mark