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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不怕 中级黑马   /  2013-6-24 12:34  /  2454 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


string str = "0308011810";(实际上就是03,08,01,18,10组成)
想变换 str 的结果为"0103081018"(按从小到大排序)

评分

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

查看全部评分

8 个回复

倒序浏览
  string str = "0308011810";
            List<string> numArray = new List<string>();

            for (int i = 0; i < str.Length; i += 2)                      //按两位拆分原字符串
            {
                string num = str[i].ToString() + str[i + 1].ToString();//将两位字符组成一个新的字符串
                numArray.Add(num);                                     //将新的字符串放进字符串集合
            }

            for (int i = 0; i < numArray.Count - 1; i++)              //冒泡排序字符串集合
            {
                for (int j = 0; j < numArray.Count - 1; j++)
                {
                    if (int.Parse(numArray[j])>int.Parse(numArray[j+1]))
                    {
                        string buffer = numArray[j];
                        numArray[j] = numArray[j + 1];
                        numArray[j + 1] = buffer;
                    }
                }
            }

            string newstring="";         
            for (int i = 0; i < numArray.Count; i++)                  //拼接新字符串
            {
                newstring += numArray[i];
            }

            Console.WriteLine(newstring);
            Console.ReadKey();

我已动手就感觉把问题弄复杂了。
回复 使用道具 举报
  1. static void Main(string[] args)
  2.         {
  3.             //string str = "0308011810";(实际上就是03,08,01,18,10组成)
  4.             //想变换 str 的结果为"0103081018"(按从小到大排序)

  5.             string str = "0308011810";
  6.             List<string> lis = new List<string>();
  7.             for (int i = 0; i < str.Length; i+=2)         // 把字符串str中每两个为一组取出 并存放到 新的集合中
  8.             {
  9.                 string a = str[i].ToString() + str[i + 1].ToString();

  10.                 lis.Add(a);
  11.             }
  12.             for (int i = 0; i < lis.Count-1; i++)  // 冒泡排序 从小到大
  13.             {
  14.                 for (int j = 0; j < lis.Count-1; j++)
  15.                 {
  16.                     if(int.Parse(lis[j])>int.Parse(lis[j+1]))
  17.                     {
  18.                     string b = lis[j];
  19.                     lis[j] = lis[j+1];
  20.                     lis[j + 1] = b;
  21.                     }
  22.                 }
  23.             }
  24.             string str1 = "";
  25.             foreach (var item in lis) // 便利集合lis 取出
  26.             {

  27.                 str1 += item;
  28.             }
  29.             Console.WriteLine(str1);
  30.             Console.ReadKey();
  31.         }

  32. 办法比较笨  楼下 有没有更简单的
复制代码
回复 使用道具 举报
string str = "0308011810";
            List<string> ls = new List<string>();
            char[] chars = str.ToCharArray();
            for (int i = 0; i < str.Length; i=i+2)
            {
                string s = chars[i].ToString() + chars[i + 1].ToString();
                ls.Add(s);
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < ls.Count; i++)
            {
                for (int j = i; j < ls.Count; j++)
                {
                    if (Convert .ToInt32 ( ls[i]) >Convert .ToInt32 ( ls[j]))
                    {
                        string temp = ls[i];
                        ls[i] = ls[j];
                        ls[j] = temp;
                    }
                }
                sb = sb.Append(ls[i]);
            }
            Console.WriteLine(sb.ToString ());
这是我写的,感觉也比较笨,不知道有啥简单方法
回复 使用道具 举报
上面的方法都大同小异啊  
回复 使用道具 举报
1、先将其拆成字符数组;2、把字符数组按两位放至一个字符串数组;3、用冒泡排序法将其排序;4、连接新字符串;5、输出。参考代码如下:
string str = "0308011810",result="";
            char[] chars = str.ToArray();
            string[] tempStr = new string[(str.Length + 1) / 2];
            for (int i = 0; i < str.Length; i += 2)  //按两位拆分原字符串
            {
                tempStr[i/2] = str[i].ToString() + str[i + 1].ToString();//将两位字符组成一个新的字符串数组
            }
            for (int i = 0; i < tempStr.Length; i++)  //冒泡排序字符串数组排序
            {
                for (int j = i; j < tempStr.Length; j++)
                {
                    if (int.Parse(tempStr[i]) > int.Parse(tempStr[j]))
                    {
                        string temp = tempStr[i];
                        tempStr[i] = tempStr[j];
                        tempStr[j] = temp;
                    }
                }
            }

            for (int i = 0; i < tempStr.Length; i++)   //得到新字符串
            {
                result += tempStr[i];
            }
            Console.WriteLine("排序前的字符串为:{0}",str);
            Console.WriteLine("排序前的字符串为:{0}",result);
            Console.ReadKey();
回复 使用道具 举报
没发现用按字典序排序的吗 直接调用Array.sort()函数就行了
  1. string s = "0308011810";
  2.             int k=0;
  3.             string[] tempStr = new string[(s.Length + 1) / 2];
  4.             for (int i = 0; i < s.Length; i += 2)  //按两位拆分原字符串
  5.             {
  6.                 tempStr[k++] = s[i].ToString() + s[i + 1].ToString();//将两位字符组成一个新的字符串数组
  7.             }
  8.             Array.Sort(tempStr);//直接调用Array.sort函数来排序
  9.             StringBuilder ss = new StringBuilder();
  10.             for (int i = 0; i < k; i++)
  11.             {
  12.                 ss.Append(tempStr[i]);
  13.             }
  14.             Console.WriteLine(ss.ToString());
复制代码
回复 使用道具 举报
                       可以更加简洁些:
                        var result = string.Empty;
                        string s = "0308011810";
                        int m = 0;
                        string[] tempStr = new string[(s.Length + 1) / 2];
                        for (int i = 0; i < s.Length; i += 2)
                        {
                                tempStr[m++] = s[i].ToString() + s[i + 1].ToString();
                        }
                        Array.Sort(tempStr);
                        result = string.Join("", tempStr); // 可以直接join 省去循环
                        Console.WriteLine(result);

回复 使用道具 举报
先把字符串分割成数组
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马