探讨两道.Net关于字符串的上机题

   前不久,我公司一同事想跳槽,出去面试,回来很郁闷。原来公司直接让上机调试,给了两道.Net题,一道Sql。Sql那个不难,但是那两道编程题好像没出结果,大概也因为给的是日文操作系统,而且用的是.Net2005,我们都习惯了2003,没接触过可能把时间给耽误了。我了解了正两道题,其实很简单的,不过在那样的时间内,那样的环境下,我未必也能做好,嘿嘿。正好我这段时间也在看正则表达式,这真是个好东东,于是每道我都附了正则的解法。 

   第一题,统计一个字符串内大写字母,空格以及数字的个数;

   解法1:

//利用Substring方法逐个截取
    int j=0,k=0,l=0;
    char A='A',Z='Z',kong=' ',number0='0',number9='9';
    while(Testtext.Length>0)
    {   
     char test=Convert.ToChar(Testtext.Substring(0,1));
     if(test>=A&&test<=Z)
     {
      j++;
     }
     if(test==kong)
     {
      k++;
     }
     if(test>=number0&&test<=number9)
     {
      l++;
     }
     if(Testtext.Length>1)
     {
      Testtext=Testtext.Substring(1,Testtext.Length-1);
     }
     else
     {
      break;
     }
     
    }

   解法2:

 //利用字符串也是数组的性质+ASCII码判断
    int j=0,k=0,l=0;
    char A='A',Z='Z',kong=' ',number0='0',number9='9';
    for(int i=0;i<Testtext.Length;i++)
    {
     char test=Convert.ToChar(Testtext[i].ToString());
     if(test>=A&&test<=Z)
     {
      j++;
     }
     if(test==kong)
     {
      k++;
     }
     if(test>=number0&&test<=number9)
     {
      l++;
     }
    }

   解法3:

//利用正则表达式判断
    int j=0,k=0,l=0;
    string Letter="[A-Z]";
    string Space="[ ]";
    string Number="[0-9]";
    MatchCollection MatchCollectionL=Regex.Matches(Testtext,Letter);
    j=MatchCollectionL.Count;
    MatchCollection MatchCollectionS=Regex.Matches(Testtext,Space);
    k=MatchCollectionS.Count;
    MatchCollection MatchCollectionN=Regex.Matches(Testtext,Number);
    l=MatchCollectionN.Count;
    
    this.textBox3.Text="大写字母:"+j.ToString()+"空格:"+k.ToString()+"数字:"+l.ToString();

    注意用正则解,需要添加命名空间using System.Text.RegularExpressions;然后就可以用了哈。

    第二道,统计一个英语句子中最大单词的长度;

   解法1:

//Substring法
    Testtext=Testtext.Trim();
    int i=0,j=0;
    while(Testtext.Length>0)
    {
     if(Testtext.IndexOf(" ")>0)
     {
      i=Testtext.Substring(0,Testtext.IndexOf(" ")).Length;
      if(i>j)
      {
       j=i;
      } 
      Testtext=Testtext.Substring(Testtext.IndexOf(" "),Testtext.Length-Testtext.IndexOf(" ")); 
      Testtext=Testtext.Trim();
     }
     else
     {
      i=Testtext.Length;
      if(i>j)
      {
       j=i;
      }
      break;
     }
    }

   解法2:

 //正则表达式
    int i=0,j=0;
    Regextext=@"/b/w+/b";
    MatchCollection myMatchCollection=Regex.Matches(Testtext,Regextext);
    for(int l=0;i<myMatchCollection.Count;l++)
    {
     i=myMatchCollection[0].Length;
     if(i>j)
     {
      j=i;
     }
    }

    this.textBox3.Text="最大单词长度为:"+j.ToString();

   目前本人就找了这几种解法,如果谁还有更好的解法,还请赐教,一起学习嘛呵呵。可以看出来,在第一道题中采取Substring的解法是最麻烦的,不过对第二道来说,如果不会正则那就只能用Substring了,两道题如果用正则表达式解的话会明显的代码清晰,可见正则表达式操纵字符串的强大。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值