日期:2014-05-19  浏览次数:20724 次

判断一段字符串是否合法算法求解?
判断一段字符串是否合法!
如题:
  字符串中必须符合以下规则:
1.Y-YYYY     占1-4位
    GG             占2     位
    CC             占2     位
    SS-SSS     占2-3位
    N-NN...N   占1-11位
    R-RR...R   占1-11位
2.字符串长度不能大于或小于11位
3.不允许用正则表达式
例如:   YYYYGGCCSSS   这是合法
            ASSSGGCCNNN   这是不合法,因为A不属于此规则集合范围中
            GYYYYCCNNNN   这是不合法,因为G规定站2位

求如何写此函数


------解决方案--------------------
1.YYYYGGCCSSS是不合法的,因为没有n和r
2.代码如下


using System;

class App
{
public static void Main()
{
Console.WriteLine(Check( "yggccssnnnr "));
Console.Read();
}

private static bool Check(string s)
{
if (s.Length != 11)
return false;
else
{
s = s.ToLower();
int[] a ={ 0, 0, 0, 0, 0, 0 };
foreach (char c in s)
{
switch (c)
{
case 'y ':
a[0] = a[0] + 1;
break;
case 'g ':
a[1] = a[1] + 1;
break;
case 'c ':
a[2] = a[2] + 1;
break;
case 's ':
a[3] = a[3] + 1;
break;
case 'n ':
a[4] = a[4] + 1;
break;
case 'r ':
a[5] = a[5] + 1;
break;
default:
return false;
}
}
if (a[0] > = 1 && a[0] <= 4 && a[1] == 2 && a[2] == 2 & a[3] > = 2 && a[3] <= 3 && a[4] > = 1 && a[4] <= 11 && a[5] > = 1 && a[5] <= 11)
return true;
else
return false;
}
}
}


------解决方案--------------------
public bool IsValidString(string str)
{
if (str.Length!=11) return false;
int[] arr = new int[6];
int n;
foreach(char c in str)
{
switch(c)
{
case 'Y ':
if (n!=0 && arr[0]!=0) return false;//非连续,退出
arr[0]++;
n = 0;
break;
case 'G ':
if (n!=1 && arr[1]!=0) return false;//非连续,退出
arr[1]++;
n = 1;
break;
case 'C ':
if (n!=2 && arr[2]!=0) return false;//非连续,退出
arr[2]++;
n = 2;
break;
case 'S ':
if (n!=3 && arr[3]!=0) return false;//非连续,退出
arr[3]++;
n = 3;
break;
case 'N ':
if (