• 输出《Harry Potter and the Sorcerer's Stone》英文i的字母数量并排序


    要求1:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。
                字母频率 = 这个字母出现的次数 / (所有A-Z,a-z字母出现的总数)
                如果两个字母出现的频率一样,那么就按照字典序排列。

    实验思路:利用每个字母的阿斯克码值不同来记录每个字母。定义一个二维数组,字母区分大小写一个52个,定义一个二维数组a[52][2]。用来存字母的阿斯克码值,另一个用来存其对应字母的个数。

                  最后进行倒叙排序,求出其百分比,并保留两位小数。

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.lang.reflect.Array;
    import java.nio.channels.NonWritableChannelException;
    import java.text.DecimalFormat;
    import java.util.Scanner;
    
    public class Hlbt {
    	static double  a[][]=new double [52][2];
    	
    	static int number;
    	public static void main(String[] args) {
    		
    		File file= new File("Harry Potter and the Sorcerer's Stone.txt");
    		FileReader fr=null;
    		BufferedReader br=null;
    		try {
    			fr=new FileReader(file);
    			br=new BufferedReader(fr);
    			String  str=null;
    			while((str=br.readLine())!=null)
    			{
    				//System.out.println(str);
    				char [] c=str.toCharArray();
    				//String b[]=new String[10000];
    				for(int i=0;i<str.length();i++)
    				{
    					int x=Integer.valueOf(c[i]);
    					if(x>=65&&x<=90)
    					{
    						a[x-65][1]++;
    						number++;
    					}
    					else if(x>=97&&x<=122)
    					{
    						a[x-97+26][1]++;
    						number++;
    					}
    				}
    				
    			}
    			for(int j=0;j<52;j++)
    			{
    				if(j<26)  a[j][0]=j+65;
    				else a[j][0]=j+97-26;
    			}
    			for (int i = 0; i<51; i++)
    		        for (int j = 0; j < 51- i; j++)
    		        {
    		            
    		            if (a[j][1] < a[j + 1][1]) {
    		                double  temp = a[j][1];
    		                a[j][1]= a[j + 1][1]; 
    		                a[j + 1][1] = temp;
    		                double m = a[j][0];
    		                a[j][0]= a[j + 1][0]; 
    		                a[j + 1][0] = m;
    		            }
    		        }
    			 for (int j=0;j<52;j++)
    			 { 
    				double b=a[j][1]/number*100;
    				 DecimalFormat df = new DecimalFormat("#.00");
    				System.out.println((char)(int)a[j][0]+":"+df.format(b)+"%");
    			 }
    			
    		
    		
    		} catch (Exception e) {
    			// TODO: handle exception
    			
    		}
    	}
    }
    

      

  • 相关阅读:
    Codeforces
    BZOJ
    BZOJ
    HDU
    Codeforces
    codeforces
    HDU-5441 Travel 离线-并查集
    codefoeces-1000E We Need More Bosses(tarjan+最长链)
    牛客网暑期ACM多校训练营(第五场)H-subseq 树状数组
    HDU-3533 Escape (BFS
  • 原文地址:https://www.cnblogs.com/zwx655/p/11806131.html
Copyright © 2020-2023  润新知