zoukankan      html  css  js  c++  java
  • ASCII码排序

    ASCII码排序

    描述

        输入m个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这m个字符。

    输入
    第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有m个字符组成,之间无空格。
    输出
    对于每组输入数据,输出一行,字符中间用一个空格分开。
    思路:
    方法一:输入一个字符串后利用java自带的库函数转化成字符数组,并利用自带的库函数对字符数组排序,然后输出即可。
    方法二:将字符串存入到字符数组之后,从字符数组中的字符进行排序。
    代码:
    public class SortASCII {
     
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            System.out.println("输入m组测试数据:");
            int m=sc.nextInt();
            String[] str=new String[m];
            System.out.println("要排序的m组ASCII数据为:");
            for(int i=0;i<str.length;i++){    
                str[i]=sc.next();        
            }
            for( int j=0;j<m;j++){
                char ch[]=new char[m];
                ch=order(str[j]);
                System.out.println("这一组ASCII数排列的顺序为:");
                for(int n=0;n<str[j].length();n++){
                    
                    System.out.print(ch[n]+" ");
                }
                System.out.println();
            }
            
            
        }
        public static char[] order(String str)  
         {  
            //方法一:
    //     char[] ch = str.toCharArray();  
    //     Arrays.sort(ch);  
    //     return ch;  
            //方法二:
            char[] ch = new char[50];
             for(int i=0;i<str.length();i++)
                 ch[i] = str.charAt(i);
             for(int j=0;j<ch.length;j++){
                 for(int i=0;i<ch.length-1;i++)
                     if(ch[i]>ch[i+1]){
                         char temp = ch[i];
                         ch[i] = ch[i+1];
                         ch[i+1] = temp;
                     }
             }
             for(int i=0;i<ch.length;i++)
                 System.out.print(ch[i]+" ");
                  System.out.println();
                  return ch;
         }   
    }

    注意:next()与nexLine()的区别:

           next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。

            简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。

            而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

     举例说明:

     public static void main(String[] args) {  
            String s1,s2;  
            Scanner sc=new Scanner(System.in);  
            System.out.print("请输入第一个字符串:");  
            s1=sc.nextLine();  
            System.out.print("请输入第二个字符串:");  
            s2=sc.next();  
            System.out.println("输入的字符串是:"+s1+" "+s2);  
        }  

    输出结果为:

    请输入第一个字符串:home
    请输入第二个字符串:work

    输入的字符串是:home work

    但如果把程序改一下:

    s1=sc.next();  
    s2=sc.nextLine();  

    运行结果是:
    请输入第一个字符串:home
    请输入第二个字符串:输入的字符串是:home

            可以看到,nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2从键盘输入值。经过验证,我发现其他的next的方法,如double nextDouble() , float nextFloat() , int nextInt() 等与nextLine()连用时都存在这个问题,解决的办法是:在每一个 next()、nextDouble() 、 nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。

       Scanner sc=new Scanner(System.in);  
       System.out.print("请输入第一个字符串:");  
          s1=sc.next();  
    sc.nextLine();  //过滤掉换行
    System.out.print("请输入第二个字符串:");  
    s2=sc.nextLine();  
      System.out.println("输入的字符串是:"+s1+" "+s2);  

    运行结果是:
    请输入第一个字符串:home
    请输入第二个字符串:work
    输入的字符串是:home work

    运行结果:

  • 相关阅读:
    BZOJ 1040 (ZJOI 2008) 骑士
    BZOJ 1037 (ZJOI 2008) 生日聚会
    ZJOI 2006 物流运输 bzoj1003
    ZJOI 2006 物流运输 bzoj1003
    NOI2001 炮兵阵地 洛谷2704
    NOI2001 炮兵阵地 洛谷2704
    JLOI 2013 卡牌游戏 bzoj3191
    JLOI 2013 卡牌游戏 bzoj3191
    Noip 2012 day2t1 同余方程
    bzoj 1191 [HNOI2006]超级英雄Hero——二分图匹配
  • 原文地址:https://www.cnblogs.com/java-7/p/7154035.html
Copyright © 2011-2022 走看看