黑马程序员-计算字符串中每种字符出现的次数

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------


题目:计算字符串中每种字符出现的次数。“Welcome to Chinaworld”,不区分大小写,打印“W 2”“e 2”“l 3”……


解题思路:

1、将字符串统一转为大写或者小写(string.upper()方法),然后把重复的字符筛选掉(for循环,向新字符串中依次填加原字符串中的字符,遇到重复则跳过),产生一个新的字符串。

2、用新的字符串中的字符和原字符串中的比较(for()循环比较是否相等,相等则次数加1),依次把每个字符出现的次数存入到一个int数组中


后话:这个是我测试里面感觉最难的,当时看到这个题真是一点思路也没有,差点就跑到网上去乱查了,后来静下心来之后,一步步思考,然后把思路整理下来,再写出了代码,后来发现程序中把string类型转换为char类型完成没有必要,string类型可以直接当作char数组类型来操作,又再修改,最后做出了让自己满意的答案。在网上看了一下,当然有更好,但相对我这个来说,实现的难度可能要大一些。

通过这个程序我感觉到规划好解题思路真的非常重要,实在不行就一步步写出来,“一步步思考,整理好思路,一步步实现,最后再修改”……


代码如下:

 class Program
    {
        /// <summary>
        /// 计算字符串中每种字符出现的次数。“Welcome to Chinaworld”,不区分大小写,打印“W 2”“e 2”“l 3”……
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            /*编程思路:新建一个string类型变量,把原存储的字符串中的字符去除掉重复后依次添加到新字符串中,
            然后用新字符串的每个字符与旧字符串比较,得到新字符串的每个字符在原字符串中重复出现的次数*/

            string str = "Welcome to Chinaworld".ToUpper(); //将字符串中的字母转化为大写字母
            string newStr = "";    //定义一个字符串变量,接收去除掉重复元素后的字符串

            for (int i = 0; i < str.Length; i++)  //使用循环结构,比较原字符串和新字符串中的字符,并将每个不重复的字符累加到新字符串上
            {
                if (newStr.Length <= 1)   //当新字符串的长度小于等于1时,直接将原字符串中的字符,累加到新字符串上
                    newStr += str[i];
                else
                {
                    bool isSame = true; //定义bool变量,初始为true,当有重复字符串时,为false;
                    for (int j = 0; j < newStr.Length; j++) //循环新字符串中的字符,避免将重复的字符累加到新的字符串上
                    {
                        if (str[i] == newStr[j]) //当原字符串字符等于新字符串中的某个字符时
                        {
                            isSame = false;
                        }
                    }
                    if (!isSame)   //为false时,跳过将当前重复的字符累加到新字符串中,并直接开始下一次循环
                        continue;
                    newStr += str[i];
                }
            }
            int[] arrInt = new int[newStr.Length]; //定义整数数组,存储每个字符在原字符串中重复出现的次数

            for (int i = 0; i < newStr.Length; i++)
            {
                for (int j = 0; j < str.Length; j++)
                {
                    if (newStr[i] == str[j]) //字符依次与原字符串中的字符比较,相等时,累加1,统计出重复的次数
                        arrInt[i]++;
                }
            }

            for (int i = 0; i < newStr.Length; i++)  //循环输出每个字符重复的次数(包含空格)
            {
                Console.Write("“{0}  {1}次”", newStr[i], arrInt[i]);
            }


            Console.ReadKey();
        }
    }


欢迎有高手前来指导,提出问题。。。




---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值