zoukankan      html  css  js  c++  java
  • 探讨两道.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了,两道题如果用正则表达式解的话会明显的代码清晰,可见正则表达式操纵字符串的强大。

  • 相关阅读:
    服务器(Ubuntu 12.04 LTS)上编译基于OpenCV的项目遇到的问题及解决方案
    ubuntu 16.04 LTS 降级安装gcc 4.8
    C#程序中获取电脑硬件配置信息的一种方法
    C#程序将对象保存为json文件的方法
    C#中运用事件实现异步调用
    Redis实现分布式锁 php
    CI框架整合UEditor编辑器上传功能
    PHP给图片加水印具体实现
    检测网站是否被和谐!
    vue的双向绑定和依赖收集
  • 原文地址:https://www.cnblogs.com/catvi/p/1953008.html
Copyright © 2011-2022 走看看