A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李云飞 于 2013-6-4 09:04 编辑

如题,怎样统计一个字符串中每个字符出现的次数?比如:字符串“hello”中h出现一次 e出现一次 l出现两次 o出现1次。想到了用字典集合可以吗?具体程序???请大侠指点一二,谢谢!我的思路: 我先将这个字符串转化成一个字符数组,再拿字符数组中的每一个元素跟字符数组中的其他的元素进行比较没有相同的就将该字符作为键,值为1存入字典中,如果有相同的就将该字符对应的值加一。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 淡定

查看全部评分

7 个回复

正序浏览
很好
回复 使用道具 举报

:)一起加油~~
回复 使用道具 举报
马炜亮 发表于 2013-6-3 23:49
你的思路基本正确,有一块地方有点小问题,见下边注释。另外一点小建议:字符串可以看成是只读字符数组 ...

谢谢。学到东西了
回复 使用道具 举报
我之后也想了好久的,你的思路跟我的完全一样了。谢谢了!
回复 使用道具 举报
本帖最后由 马炜亮 于 2013-6-3 23:53 编辑

    你的思路基本正确,有一块地方有点小问题,见下边注释。另外一点小建议:字符串可以看成是只读字符数组,我们这里不用改变字符串中某个元素的值,所以就不用“先将这个字符串转化成一个字符数组”了{:soso_e113:}
            string str = "hello";//比如这里,str[0]表示‘h’。
            Dictionary<char, int> dic = new Dictionary<char, int>();//根据你的思路,我们需要一个字典,所以在这创建一个字典对象。
            for (int i = 0; i < str.Length ; i++)
            {
                if (!dic.ContainsKey(str))//****(注意这里,你的思路问题在这)****这里应该拿字符串的每一个元素(字符)去判断字典的键是否包含该元素(字符)。而不是“跟字符数组中的其他的元素进行比较”。比如元素str[0],判断字典的键是否包含h。
                {
                    dic.Add(str, 1);//根据你的思路:不包含的话就将该元素(字符)作为键,值为1存入字典中
                }
                else
                {
                    dic[str] += 1;//还是你的思路:有相同的就将该元素(字符)对应的值加一。
                }
            }
********************到此已经统计完毕,下边就是输出语句了。*********************
            Console.WriteLine("这句话中字母及出现的次数分别是:");
            foreach (var item in dic.Keys)
            {
                Console.WriteLine(item + "----" + dic[item]);
            }
            Console.ReadKey();

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
  1.    /// <summary>
  2.         /// 查找指定出现次数的第一个字符
  3.         /// </summary>
  4.         /// <param name="str">需要查找的字符</param>
  5.         /// <param name="charFindCount">查找次数</param>
  6.         /// <returns></returns>
  7.         public static string FindFirstCountChar(string str, uint charFindCount)
  8.         {
  9.             #region 参数验证
  10.             if (str == null || str == string.Empty)
  11.             {
  12.                 throw new ArgumentException("请输入需要查找的字符!");
  13.             }
  14.             if (charFindCount < 1)
  15.             {
  16.                 throw new ArgumentException("查找字符出现的次数应大于0!");
  17.             }
  18.             #endregion

  19.             int count = 0;  //字符出现的次数

  20.             for (int i = 0; i < str.Length; i++)
  21.             {
  22.                 char currentChar = str[i];   //需要查找的字符

  23.                 for (int j = 0; j < str.Length; j++)  //在string数组中循环查找
  24.                 {
  25.                     if (currentChar == str[j])
  26.                     {
  27.                         count += 1;
  28.                     }
  29.                 }
  30.                 if (count == charFindCount)
  31.                 {
  32.                     return currentChar.ToString();
  33.                 }
  34.                 count = 0;
  35.             }
  36.             return null;
  37.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
static void Main(string[] args)
        {

            string str = "Hellow";
            Dictionary<char, int> dic=Fun(str);

            System.Console.WriteLine("Welcome to Chinaworld");
            foreach (KeyValuePair<char, int> a in dic)
            {
                System.Console.WriteLine(string.Format("字母{0} 有{1}个",a.Key,a.Value));
            }
            System.Console.ReadLine();
        }

        public static Dictionary<char, int> Fun(string str) {
            Dictionary<char, int> dic = new Dictionary<char, int>();
            str= str.Replace(" ", "");
            for (int i = 0; i < str.Length;i++)
            {
                if (dic.ContainsKey(str[i]))
                {
                    continue;
                }
                dic.Add(str[i], 0);

                foreach (char ch1 in str)
                {
                    //这个部分不是很好。不过先实现吧。因为可以通过下标去比对
                    if (str[i].ToString().ToUpper() == ch1.ToString().ToUpper())
                    {
                        dic[str[i]]++;
                    }
                }
            }
            return dic;
        }


写得不是很好。记得可以用两个数组去做标记。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马