| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3153 人关注过本帖
标题:现在纠结的问下,关于字符串中某个子串出现的次数有没有一个好的算法,求交 ...
只看楼主 加入收藏
默默风尘
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2012-3-17
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:11 
现在纠结的问下,关于字符串中某个子串出现的次数有没有一个好的算法,求交流
我有一个字符串,现在的想法是取出某个字符串,然后统计出这个子串在总的字符串中出现的次数。例如:“abckashdfkjhasdfhasdfaaaaasdjfkjhsakfhsahdfuuasdf";
我想找到出现aa的出现次数。。求交流。。
搜索更多相关主题的帖子: 字符串 统计 
2013-08-15 18:27
默默风尘
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2012-3-17
收藏
得分:0 
给个回复吧,我这边着急呢。。。
2013-08-15 18:35
默默风尘
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2012-3-17
收藏
得分:0 
程序代码:
/******************************************************************************

 * 功能: 实现对一个给定的字符串所查找的某个字符串后的到的出现次数

 * 作者:yuchenli

 * 创建日期:2013-8-14

 * 备注:第一次好像会出现错误,希望会得到改进

 * 其他:无

 * ***************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StringPracticeExam
{
    class String
    {
        public int i = 0;//初始化返回参数。
        public int j = 0;
        /// <summary>
        /// 判断字符串中给定子串的出现次数。
        /// </summary>
        /// <param name="Index">传入的字符串,需要找的字符串</param>
        /// <param name="strNew2">在哪个字符串中寻找。</param>
        /// <returns>返回出现次数</returns>
        public int StringPractice(string Index,string strNew2)
        {
           int location= strNew2.IndexOf(Index, 0, strNew2.Length);//首先找到这个字符串所在的位置,这是我首先想到的东西,至于怎么利用这个位置。。还没想好那会
           if (location == -1)//这里的-1是,假如找不到这个字符串它会返回一个-1,这是在调试中找到的。这样看来这个就是递归的终止条件了
           {
               return i;//直接返回当前的i,
           }
           else
           {
               i += 1;
               //这里假如我的字符串是:“caabcaacbaaadf"要找的是"aa"我们希望的结果是:4,我们查找的方法是:
               //逐个遍历这个字符串,每次都找到两个字符,然后和需要的字符串进行对比,假若相等,则增加,否则就找下一个,
               //第一次遍历的结果是false,则比对的是"aabcaacbaaadf"很明显对比时能找到的,此时应该从第二个开始也就是第三次遍历的是:“bcaacbaaadf”
               //以此类推,现在开始书写代码在另一个方法中。
               #region 不规则的方法。
               string StrOlder1 = strNew2.Substring(location + Index.Length, strNew2.Length - (location + Index.Length));//取子串,目的是对所给字符串得到分割,递归的查找
               //string StrOlder1 = strNew2.Substring(1, strNew2.Length - 1);
               if (StrOlder1.Length >= Index.Length)
               {
                   StringPractice(Index, StrOlder1);//这里用到了递归。
               }
               else
               {
                   return i;//返回参数
               }
               return i;//返回参数
               #endregion
               
           }
        }

        /// <summary>
        /// 判断出现次数,这个方法实现了形如"aaa"找aa出现2次的结果
        /// </summary>
        /// <param name="Index">传入的字符串,需要找的字符串</param>
        /// <param name="Strnew2">在哪个字符串中寻找</param>
        /// <returns>返回出现次数</returns>
        public int StringFind(string Index, string Strnew2)
        {
            string median=Strnew2;//初始化的字符串,这个字符串就是不断的查找得到的结果
            #region 有了想法后的方法
            if (Strnew2.Length >= Index.Length)//进行递归遍历的条件,我们不能无休止的让这个程序遍历下去。这个等号一定要有,这就是一种情况,假如,最后的字符串就是我们要找的情况
            {
                string tmp = Strnew2.Substring(0, Index.Length);//找出第一个遍历
                if (tmp.Equals(Index))//当找出的字符串就是我们要找的,就进行返回数+1
                {
                    j += 1;
                     median = median.Substring(1, median.Length - 1);//这里就是不停的一个一个的对比。其实这里还有一种情况的,还没考虑好
                }
                else
                {
                    median = median.Substring(1, median.Length - 1);
                    //median = median.Substring(Index.Length, median.Length - Index.Length);//这个字符串是刚开始假如我们没找到,我们就减去这个字符串位置的字符串,这样考虑不妥。
                }
                StringFind(Index, median);//递归调用

                return j;//返回参数
            }
            else
            {
                return j;//返回参数
            }
            #endregion
        }
    }
}
2013-08-15 21:59
默默风尘
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2012-3-17
收藏
得分:0 
程序代码:
/******************************************************************************

 * 功能:字符串查找

 * 作者:yuchenli

 * 创建日期:2013-8

 * 备注:貌似"ab"可以实现,但是其他不行

 * **************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StringPracticeExam
{
    class Program
    {
        static void Main(string[] args)
        {
            String str = new String();
            //string str2="qababbwerabtyababuiopasdfghjkabl";
            string str2 = "aaaaaaabddaaa";
            Console.WriteLine("我们要查找的字符串是:{0}", str2);
            Console.WriteLine("请输入你要查找的字符串或字符");
            string str3 = Console.ReadLine();
            Console.WriteLine("{0}字符串出现的次数是{1}", str3, str.StringPractice(str3, str2));
            Console.WriteLine("{0}字符串出现的次数是{1}", str3, str.StringFind(str3, str2));
            Console.ReadLine();
        }
    }
}
2013-08-15 21:59
默默风尘
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2012-3-17
收藏
得分:0 
现在基本已经可以完成结果了,可是我还想的到更多的算法,所以,贴出来,希望大家能给我多点思路,本人菜鸟,然后就是编码不行也行,给我你的想法,这里需要的是想法不是结果,谢谢
2013-08-15 22:01
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
我的想法就是逐位扫描  没啥更好的方法

DO IT YOURSELF !
2013-08-16 09:04
lybh24
Rank: 8Rank: 8
等 级:贵宾
威 望:19
帖 子:120
专家分:701
注 册:2012-9-8
收藏
得分:5 
http://

新群:273209143
2013-08-16 13:51
yimaoqian198
Rank: 4
等 级:业余侠客
帖 子:108
专家分:287
注 册:2010-5-10
收藏
得分:5 
只是计算次数,我觉得正则可以实现
程序代码:
string str=“abckashdfkjhasdfhasdfaaaaasdjfkjhsakfhsahdfuuasdf";
 Regex regex = new Regex(@"(?isx)<div\s?class=\\?""word_wrap_518\sp_info\\?"">(?<url>(?><div[^>]*>(?<Open>)|</div>(?<-Open>)|(?:(?!</?div\b).)*)*)(?(Open)(?!))</div>", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
MatchCollection match = regex.Matches(str);
int count=match.Count;
2013-08-16 14:23
yimaoqian198
Rank: 4
等 级:业余侠客
帖 子:108
专家分:287
注 册:2010-5-10
收藏
得分:0 
以下是引用yimaoqian198在2013-8-16 14:23:31的发言:

只是计算次数,我觉得正则可以实现

string str=“abckashdfkjhasdfhasdfaaaaasdjfkjhsakfhsahdfuuasdf";
 Regex regex = new Regex(@"(?isx)<div\s?class=\\?""word_wrap_518\sp_info\\?"">(?<url>(?><div[^>]*>(?<Open>)|</div>(?<-Open>)|(?:(?!</?div\b).)*)*)(?(Open)(?!))</div>", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
MatchCollection match = regex.Matches(str);
int count=match.Count;



正则写错了 Regex regex=new Regex("a", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
2013-08-16 14:24
默默风尘
Rank: 1
等 级:新手上路
帖 子:15
专家分:1
注 册:2012-3-17
收藏
得分:0 
回复 6楼 wp231957
除了这个方法,还有么,我的第二个就是这个方法
2013-08-17 18:35
快速回复:现在纠结的问下,关于字符串中某个子串出现的次数有没有一个好的算法, ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026108 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved