黑马程序员技术交流社区

标题: 求更简便方法: 有一个字符串是用空格分隔的一系列整数... [打印本页]

作者: Always.    时间: 2013-9-17 11:57
标题: 求更简便方法: 有一个字符串是用空格分隔的一系列整数...
本帖最后由 Always. 于 2013-9-24 12:54 编辑

题目:有一个字符串是用空格分隔的一系列整数,写一个程序把其中的整数做如下重新排列打印出奇数显示在左侧、偶数显示在右侧。 比如‘2 7 8 3 22 9’显示成‘7 3 9 2 8 22‘
我的代码能够实现程序功能,但是觉得代码长度太长,有更简便的实现方法吗?
代码如下:
bool flag = false;      
     do  //此处的循环的作用是:当用户输入的不是一系列整数的时候,提示用户重新输入,直到满足条件为止      
{               
        //此处的try{}catch{}是用于判别输入的是否为一系列整数               
     try               
{              
      Console.WriteLine("请用户输入一串数字,中间用空格隔开");            
       string strnumbers = Console.ReadLine();            
        string[] remove = strnumbers.Split(' '); //remove[]这个数组中的内容是strnumbers分割空格之后的内容              
      int[] numbers = new int[remove.Length]; //numbers这个数组是用于接收将字符串数组转变为整形数组的内容            
       for (int i = 0; i < remove.Length; i++)                  
      {                    
      numbers = Convert.ToInt32(remove);               
       }                 
        flag = false;            
        int ounum = 0;//定义一个计算偶数个数的变量            
        int jinum = 0;//定义一个计算奇数个数的变量              
        for (int j = 0; j < numbers.Length; j++)    //此个循环是为了计算出numbers数组中有多少个奇数有多少个偶数            
         {                     

                 if (numbers[j] % 2 == 0)           
             {                        
                  ounum++;                  
              }                 
             else               
             {                     
                  jinum++;                  
              }            
       }              
             int[] ounum1 = new int[ounum]; int n = 0;//定义一个存放偶数的数组 ,n为偶数存放的位置            
             int[] jinum1 = new int[jinum]; int t = 0;//定义一个存放奇数的数组               
      for (int j = 0; j < numbers.Length; j++)               
       {                    
             if (numbers[j] % 2 == 0)   //当numbers[j]为偶数的时候,这个数存放在偶数数组中。

                                                     //比如numbers[0]为偶数时,放在ounum[0]中,于此同时n++;               
          {                       
             ounum1[n] = numbers[j];              
               n++;
            }                  
             else     //当numbers[j]为奇数的时候,这个数存放在奇数数数组中。比如numbers[0]为奇数时,放在jinum[0]中,于此同时n++;               
           {                       
            jinum1[t] = numbers[j];                 
           t++;            
           }

     }            
       for (int i = 0; i < jinum1.Length; i++)  //遍历输出奇数数组的内容           
         {                  
          Console.Write(jinum1 + " ");         
          }            
        for (int j = 0; j < ounum1.Length; j++) //遍历输出偶数组的内容        
            {         
               Console.Write(ounum1[j] + " ");        
            }              
   }              
  catch              
  {               
     Console.WriteLine("请输入整数");         
          flag = true;         
      }      

} while (flag);         
      Console.ReadKey();
我的思路:1.先把字符串数组转换成整数数组 2.在整数数组中,找出奇数,存在奇数数组中;找出偶数,存在偶数数组中。 3. 把奇数数组和偶数数组拼接,便可实现功能。




作者: ℡跡....    时间: 2013-9-17 12:04
呀呀,代码格式成这样,谁看得清呀。。。
作者: haxyek    时间: 2013-9-17 12:13
本帖最后由 haxyek 于 2013-9-17 12:19 编辑

题目只是需要打印输出,没必要拼接。。{:soso_e100:}
  1. static void Main(string[] args)
  2.                 {
  3.                         string str="2 7 8 3 22 9";
  4.                         string[] Tstr = str.Split(' ');
  5.                         for (int i = 0; i < Tstr.Length; i++)
  6.                         {
  7.                                 if (Convert.ToInt32(Tstr[i]) % 2 != 0)
  8.                                         Console.Write(Tstr[i] + " ");
  9.                         }
  10.                         for (int i = 0; i < Tstr.Length; i++)
  11.                         {
  12.                                 if (Convert.ToInt32(Tstr[i]) % 2 == 0)
  13.                                         Console.Write(Tstr[i] + " ");
  14.                         }
  15.                         Console.ReadLine();
  16.                 }
复制代码

作者: Always.    时间: 2013-9-17 12:20
haxyek 发表于 2013-9-17 12:13
题目只是需要打印输出,没必要拼接。。

谢谢~你们都好厉害,这个题目思路知道,但是实现的时候走了好多弯路。

作者: 七里香    时间: 2013-9-17 12:56
  1. Console.WriteLine("请输入:");
  2.             string strInput=Console.ReadLine();
  3.             string[] strNums = strInput.Split(new char[]{' '},StringSplitOptions.RemoveEmptyEntries);
  4.             string jishu = null, oushu = null;
  5.             int[] intNums = new int[strNums.Length];
  6.             int i = 0;
  7.             try
  8.             {
  9.                 //转换
  10.                 foreach (string s in strNums)
  11.                 {
  12.                     intNums[i] = Convert.ToInt32(s);
  13.                     i++;
  14.                 }
  15.                 //判定并拼接成字符串
  16.                 for (int j = 0; j <intNums.Length; j++)
  17.                 {
  18.                     if (intNums[j] % 2 == 0)
  19.                     {
  20.                         oushu = oushu + intNums[j].ToString() + " ";
  21.                     }
  22.                     else
  23.                     {
  24.                         jishu = jishu + intNums[j].ToString() + " ";
  25.                     }
  26.                 }
  27.                 Console.WriteLine("{0} {1}",jishu,oushu);
  28.             }
  29.             catch(Exception)
  30.             {
  31.                 Console.WriteLine("你输入的不是数字!");
  32.             }
  33.             Console.ReadKey();
复制代码
好吧我是来骗技术分的{:soso_e149:}
作者: guo329838627    时间: 2013-9-17 13:51

  1.           Console.WriteLine("请输入一串数字,中间用空格隔开!");//提示信息
  2.             string list = Console.ReadLine();
  3.             string JiShu = "";//初始化奇数
  4.             string OuShu="";//初始化偶数
  5.             string[] Res = list.Split(' ');//将数字放到数组中
  6.             for (int i = 0; i < Res.Length; i++)//遍历数组
  7.             {
  8.                 if (int.Parse(Res[i]) % 2 != 0)//如果为奇数
  9.                 {
  10.                     JiShu += Res[i] + " ";//则放到Jishu中
  11.                 }
  12.                 else//偶数
  13.                 {
  14.                     OuShu += Res[i] + " ";//则放到OuShu中
  15.                 }
  16.             }
  17.             OuShu = OuShu.Substring(0, OuShu.LastIndexOf(' '));//处理掉最后一个空格
  18.             Console.WriteLine("最新排序:"+JiShu+OuShu);//输出
复制代码
这是我写的方法,希望对你有帮助
作者: 顾磊磊    时间: 2013-9-24 12:44
  1. static void Main(string[] args)
  2.         {
  3.             string numbers = "65 98 90   543 67   453   ";
  4.             StringBuilder even = new StringBuilder();//存储偶数
  5.             StringBuilder odd = new StringBuilder();//存储奇数
  6.             string[] numlist = numbers.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);//排除了空字符串这种结果
  7.             foreach (string num in numlist)
  8.             {
  9.                 int n = 0;//buffer
  10.                 if (!int.TryParse(num, out n))
  11.                 {
  12.                     Console.WriteLine("输入的某个数据有问题但是这里选择了继续! 这个有问题的数据是:"+num);
  13.                     continue;
  14.                 }
  15.                 if (n % 2 == 0)
  16.                     even.Append(num + ' ');
  17.                 else
  18.                     odd.Append(num + ' ');
  19.             }
  20.             Console.WriteLine(odd.ToString() + even.ToString());//最终把两个字符串加起来就OK了。
  21.             Console.ReadKey();
  22.         }
复制代码
这是我写一段代码,偶以为值得一看,{:soso_e116:}




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