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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 董华阳 于 2013-3-14 14:13 编辑

找连续数,例如一整数字符串1235678....,输出1-3,4,6-8 。如果是连续的数则输出这组连续数的第一个和最后一个数中间用“-”连接。不是则直接输出 。以下是我写的代码感觉比较麻烦,是否有简单的?谢谢!

        string[] str = { "1", "2", "4", "5", "7", "8", "9", "11", "12", "14","17" };
            //创建个ArrayList数组
            ArrayList list = new ArrayList();        
            for (int i = 0; i < str.Length; i++)
            {
                //判断数组中的第一个元素
                if (i < 1)
                {
                    if (Convert.ToInt16(str[i + 1]) - Convert.ToInt16(str) == 1)
                    {
                        list.Add(str);
                    }
                    else
                    {
                        Console.WriteLine(str);
                    }
                }
                else
                {
                    //判断数组中的除第一个元素及最后一个元素中的其它元素
                    if (i < str.Length - 1)
                    {
                        if (Convert.ToInt16(str[i + 1]) - Convert.ToInt16(str) == 1)
                        {
                            list.Add(str);
                        }
                        else
                        {
                            if (Convert.ToInt16(str) - Convert.ToInt16(str[i - 1]) == 1)
                            {
                                list.Add(str);
                                Console.WriteLine(list[0] + "-" + list[list.Count - 1]);
                                list.Clear();
                            }
                            else
                            {
                                Console.WriteLine(str);
                            }
                        }
                    }
                    else
                    {
                        //判断数组中的最后一个元素
                        if (Convert.ToInt16(str) - Convert.ToInt16(str[i - 1]) == 1)
                        {
                            list.Add(str);
                            Console.WriteLine(list[0] + "-" + list[list.Count - 1]);
                            list.Clear();
                        }
                        else
                        {
                            Console.WriteLine(str);
                        }
                    }
                }
            }
            Console.ReadKey();

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 曾玉锋 于 2013-3-13 20:48 编辑

晕死,copy上来的代码居然部分丢失
回复 使用道具 举报
string[] str = { "1", "2", "3", "4", "5", "8", "9", "11", "12", "14", "17" };
            List<int> list = new List<int>();
            StringBuilder sb = new StringBuilder();
            //添加第一个数
            sb.Append(str[0]);
            for(int i=1;i<str.Length-1;i++)
            {
               
                int num1=int.Parse(str[i-1]);
                int num2=int.Parse(str[i]);
                int num3=int.Parse(str[i+1]);
                if(num2-1==num1&&num2+1==num3)
                {
                    sb.Append("-");
                }
                else if (num2 - 1 == num1 && num2 + 1 != num3)
                {
                    sb.Append("-"+str[i]);
                }
                else
                {
                    sb.Append(","+str[i]);
                }
                //当i=str.Length-2时 对最后两个元素进行判断
                if (i == str.Length - 2 && num2 + 1 == num3)
                {
                    sb.Append("-" + str[i + 1]);
                }
                else if(i==str.Length-2&&num2+1!=num3)
                {
                    sb.Append(","+str[i+1]);
                }
            }
            Console.WriteLine(Regex.Replace(sb.ToString(),@"-+","-"));

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

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