题目描述
如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。
输入描述:
输入一串字符。
输出描述:
对字符中的 各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
输入例子:
aadddccddc
输出例子:
dca
亮点:1、用数字的下标表示字符。下标位置所对应的值可以存储字符出现次数。
2、用二维数组(2,n)来模拟hashmap的key与value的映射。这个二维数组是两列N行。 并能用冒泡排序对这个二维数组排序。
源码:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int[] count = new int[128];
while(sc.hasNextLine()){
String str = sc.nextLine();
for(int i=0;i<128;i++){
count[i] = 0;
}
for(int i=0;i<str.length();i++){
char ch = str.charAt(i);
count[ch]++;
}
int len = 0;
for(int i=0;i<128;i++){
if(count[i]!=0){
len++;
}
}
int[][] arr = new int[2][len];
int k=0;
for(int i=0;i<128;i++){
if(count[i]!=0){
arr[0][k] = i;
arr[1][k] = count[i];
k++;
}
}
//冒泡排序
for(int i=0;i<len-1;i++){
for(int j=0;j<len-1;j++){
if(arr[1][j]<arr[1][j+1]){
int temp = arr[1][j];
arr[1][j]= arr[1][j+1];
arr[1][j+1]=temp;
temp = arr[0][j];
arr[0][j]= arr[0][j+1];
arr[0][j+1]=temp;
}
}
}
for(int j=0;j<len;j++){
System.out.print((char)arr[0][j]);
}
System.out.println();
}
}
}