分享

ASP.net(c#)查找出一段文字中出现次数最多的字

 牛人的尾巴 2017-01-21

ASP.net(c#)查找出一段文字中出现次数最多的字

(2013-03-25 13:07:16)
编写思路
有一段文字,我们不知其中出现最多是哪个字,这就不同于给你一个字查找这个字在某段中出现的次数,但我们可以利用这个思路,先找出每个字出现的次数,再对比那个多。
  1. 第一步先把这段文字转换成一个个字符,用一个字符型数组保存
  2. 第二步用两个循环匹配字段中的字,在第二个循环里要记录相同字符出现的次数,用正则表达式判断这字符是否是标点,判断次数与上一个字符的次数的大小,如果大于上次字符的次数则清空上次的结果,保存这次的结果(次数与字),如果等于则判断是否是同一个字,如果不是则有多个结果(这里我们就知到要用List来保存这结果)
  3. 第三步输出结果
实现代码
界面我们要一个输入框、一个输出框和一个按纽
ASP.net(c#)查找出一段文字中出现次数最多的字
HTML
<asp:TextBox ID="txtSegment" runat="server" TextMode="MultiLine" Height="172px" Width="280px"></asp:TextBox>
<asp:Button ID="btnFind" runat="server" style=" position:relative; top:-80px" Text="查找文段出现次数最多的字" Height="71px"  Width="176px" onclick="btnFind_Click" />
<asp:TextBox ID="txtResult" runat="server" TextMode="MultiLine" Height="172px" Width="280px"></asp:TextBox>
cs代码
protected void btnFind_Click(object sender, EventArgs e)
        {
            int n = 0, m = 0;   //n用来计算字出现的字数,m记录最多的次数用来判断那个字出现次数多
            bool t = false;    //t用来判断最多次数相同的时候,字是否相同
            string strSegment = txtSegment.Text;
            //把得到的文段拆成字符,用数组保存
            char[] chars = strSegment.ToCharArray();          
            //用List保存结果(最多次数可能同时有多个字)
            List testList = new List();
            //正则表达式过虑标点符号(有时出现次数最多的是标点)
            Regex myReg = new Regex("\\p{P}|\\p{S}");
            //两个循环进行匹配,保存最多次数
            foreach (char a in chars)
            {
                n = 0;
                foreach (char b in chars)
                {
                    if (a.ToString().Equals(b.ToString()))  //相同则记数+1
                    {
                        n++;
                    }
                }
                string strReg = myReg.Replace(a.ToString(), "");   //如果是标点则替换成空
                if (m < n && strReg != "")            //是否比前一个次数最多的字次数多且不是标点
                {
                    m = n;                          //保存最多次数
                    //清空之前保存的结果,重新保存新的结果
                    testList.Clear();
                    testList.Add(a.ToString());
                }
                else if (m == n && strReg != "")    //是否与前一个次数最多的字次数相等且不是标点
                {
                    t = false;
                    for (int i = 0; i < testList.Count; i++)   //检查是否与之前的结果有重覆(次数相等检查是否是同一个字),之前结果已经有则跳过
                    {
                        if (a.ToString() == testList[i])
                        {
                            t = true;
                            break;
                        }
                    }
                    if (!t)
                    {
                        testList.Add(a.ToString());        //如果不是同一个字则再加入结果  
                    }
                }
            }
            foreach (string element in testList)
            {
                txtResult.Text += element + "";
            }
        }
以上是我自己写的一个程序

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多