黑马程序员技术交流社区

标题: 判断字符出现次数 [打印本页]

作者: 廖新    时间: 2013-3-5 00:13
标题: 判断字符出现次数
定义一个字符串,判断有没有连续重复的字符出现,统计重复字符出现次数。如 string str=zxcvvcxza, zxcv各出现了2次。a出现了1次。 求解。。。
作者: 安玉波    时间: 2013-3-5 00:35
用冒泡法,代码如下:
  1. string str = "zxcvvcxza";
  2.             foreach (char item in str)
  3.             {
  4.                 int strCount = 0;
  5.                 for (int i = 0; i < str.Length; i++)//遍历该字符在字符串中出现的次数
  6.                 {
  7.                     if (item.Equals(str[i]))
  8.                     {
  9.                         strCount++;
  10.                     }
  11.                 }
  12.                 Console.WriteLine(item + "出现了" + strCount + "次");
  13.             }
  14.             
  15.             Console.ReadKey();
复制代码
我写的这个方法不足之处是对遍历过的字符进行了多次遍历,如’z‘字符在字符串中出现了两遍 则就对‘z’字符统计了两次。期待更好的方法学习....
作者: 岳珅    时间: 2013-3-5 06:06
安玉波 发表于 2013-3-5 00:35
用冒泡法,代码如下:我写的这个方法不足之处是对遍历过的字符进行了多次遍历,如’z‘字符在字符串中出现 ...

其实你foreach里面的那个for循环是不必要的。
我在你代码的基础上修改了一下,去掉了你里面的那个循环~
  1.         static void Main(string[] args)
  2.         {
  3.             string str = "zxcvvcxza";
  4.             int count=0;
  5.             int strCount = 0;
  6.             foreach (char z in str)
  7.             {
  8.                 if (str[count]=='z')
  9.                 {
  10.                     strCount++;
  11.                 }
  12.              count++;
  13.              }
  14.             Console.WriteLine(z+"出现了"+strCount + "次");
  15.             Console.ReadKey();
  16.         }  
复制代码

作者: 安玉波    时间: 2013-3-5 08:39
岳珅 发表于 2013-3-5 06:06
其实你foreach里面的那个for循环是不必要的。
我在你代码的基础上修改了一下,去掉了你里面的那个循环~ ...

你写的这个代码只是找字符‘z’在这个字符串中出现了几次,帖主要求的是这个字符串中的每个字符出现了几次。
作者: dbqwaii    时间: 2013-3-5 09:11
//  string str = "zxcvvcxza";
            /////找到字符 根据字符判断出现的次数
            /////字符是键 出现的次数就是值
            /////循环 判断
            //Dictionary<char, int> dic = new Dictionary<char, int>();  //char代表字符  int代表出现的次数
            //for (int i = 0; i < str.Length; i++)
            //{
            //    if (dic.ContainsKey(str[i]))
            //    {
            //        //str[i]是键  如果有这个键 那么 这个值加一
            //        dic[str[i]]++;
            //    }
            //    else //没有
            //    {
            //        //没有的话  就把这个字母加进来 原样输出 并且后边出现的次数 是第一次
            //        dic.Add(str[i], 1);   
            //    }
            //}

            //foreach (KeyValuePair<char,int> kv in dic)
            //{
            //    Console.WriteLine("字母{0}出现了{1}次",kv.Key,kv.Value); //字母是键  次数是值
            //}
            //Console.ReadKey();
作者: 廖新    时间: 2013-3-5 09:44
谢谢同学们的分享。 学习了。。@安玉波 @岳珅 @dbqwaii
作者: 赵文博    时间: 2013-3-5 10:07

本帖最后由 赵文博 于 2013-3-5 02:01 编辑


调用字符床分割是不可行的,比如要在“爱爱爱”中查找“爱”及出现次数,分割出的数组长度会是0
可以用正则表达式
        static void Main(string[] args)
        {
            string str = "爱1爱2爱";
            string findStr = "爱";

            Regex r = new Regex(findStr);               // 定义一个Regex对象实例
            MatchCollection  m = r.Matches(str);        // 在字符串中匹配

            if (m != null)
            {
                for (int i = 0; i < m.Count; i++)
                    Console.WriteLine(m.Index);      //输出匹配位置

                Console.WriteLine("出现次数为"+m.Count);
            }


            Console.ReadKey();

        }

作者: 廖新    时间: 2013-3-5 10:17
赵文博 发表于 2013-3-5 10:07
本帖最后由 赵文博 于 2013-3-5 02:01 编辑

regex,正则表达式类。 谢谢了。
作者: 颜晓峰    时间: 2013-3-5 14:06
本帖最后由 颜晓峰 于 2013-3-5 14:10 编辑

楼主的问题拆分:
1.
定义一个字符串,判断有没有连续重复的字符出现

连续重复是关键字!
string s = "zxcvvcxza, zxcv";
string s1="";
int count=0;
            //读取字符串中的每个元素
            for (int i = 0; i < s.Length-2;i++ )
            {
                //判断,若相邻2个字符相同,即是连续重复出现的字符了
                if (s.Substring(i, 1) == s.Substring(i + 1, 1)  )
                {
2.
统计连续重复字符出现次数

                    //获取连续重复出现的字符
                    s1=s.Substring(i, 1);
                    //遍历
                     foreach(string s2 in s)
                     {
                        if(s2==s1)
                         {
                             //计算数量
                             count ++;
                          }
                     }
                }




作者: 葛杨杨    时间: 2013-5-14 18:39
岳珅 发表于 2013-3-5 06:06
其实你foreach里面的那个for循环是不必要的。
我在你代码的基础上修改了一下,去掉了你里面的那个循环~ ...

如果不区分大小写的话, 应该怎么写?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2