import java.util.Scanner;
/**
Escribir un programa que tome varias palabras, 100 como máximo, en
minúsculas, separadas por espacios, desde la entrada estándar y
devuelva un histograma por cada una de las palabras dando la
frecuencia de aparición de cada letra, así como un histograma final
para todas las palabras. Un histograma debe visualizarse en orden
alfabético siguiendo las siguientes directrices: una línea completa
por cada letra del alfabeto español (27 letras) que aparezca en la
palabra, comenzando la línea por la letra seguida de dos puntos y un
espacio a continuación. Después de eso, tantos símbolos de suma (+)
como la frecuencia de aparición de la letra en la palabra. Si la letra
tiene frecuencia cero, no debe aparecer su línea en el histograma.
Cada histograma debe ser separado con una línea vacía del siguiente,
exceptuando el último. El histograma final debe mostrar la frecuencia
de las letras en todas las palabras de entrada.
Ejemplo
Entrada
hola lala
Salida
a: +
h: +
l: +
o: +
a: ++
l: ++
a: +++
h: +
l: +++
o: +
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Scanner lee = new Scanner(System.in);
Histograma global = new Histograma();
// Mientras haya palabras en la entrada
while (lee.hasNext()){
// Leer palabra
String pal = lee.next();
// Calcular histograma
Histograma hpal = new Histograma();
hpal.aumentaFrecuencias(pal);
global.aumentaFrecuencias(pal);
// Imprimir Histograma
System.out.print(hpal);
// Imprimir una línea en blanco
System.out.println();
}
// Imprimir histograma global
System.out.print(global);
}
}
class Histograma {
enum Letras {a,b,c,d,e,f,g,h,i,j,k,l,m,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z};
private int[] _frecuencias;
public Histograma(){
_frecuencias = new int[Letras.values().length];
}
public void aumentaFrecuencias(String s){
for (int i=0; i < s.length(); i++){
_frecuencias[Letras.valueOf(s.substring(i, i+1)).ordinal()]++;
}
}
@Override
public String toString(){
StringBuffer sb = new StringBuffer();
for (Letras l:Letras.values() ){
if (_frecuencias[l.ordinal()] > 0){
String name=l.name();
sb.append(name+": ");
for (int i=1; i <= _frecuencias[l.ordinal()]; i++ ){
sb.append('+');
}
sb.append("\n");
}
}
return sb.toString();
}
}
/**
Escribir un programa que tome varias palabras, 100 como máximo, en
minúsculas, separadas por espacios, desde la entrada estándar y
devuelva un histograma por cada una de las palabras dando la
frecuencia de aparición de cada letra, así como un histograma final
para todas las palabras. Un histograma debe visualizarse en orden
alfabético siguiendo las siguientes directrices: una línea completa
por cada letra del alfabeto español (27 letras) que aparezca en la
palabra, comenzando la línea por la letra seguida de dos puntos y un
espacio a continuación. Después de eso, tantos símbolos de suma (+)
como la frecuencia de aparición de la letra en la palabra. Si la letra
tiene frecuencia cero, no debe aparecer su línea en el histograma.
Cada histograma debe ser separado con una línea vacía del siguiente,
exceptuando el último. El histograma final debe mostrar la frecuencia
de las letras en todas las palabras de entrada.
Ejemplo
Entrada
hola lala
Salida
a: +
h: +
l: +
o: +
a: ++
l: ++
a: +++
h: +
l: +++
o: +
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Scanner lee = new Scanner(System.in);
Histograma global = new Histograma();
// Mientras haya palabras en la entrada
while (lee.hasNext()){
// Leer palabra
String pal = lee.next();
// Calcular histograma
Histograma hpal = new Histograma();
hpal.aumentaFrecuencias(pal);
global.aumentaFrecuencias(pal);
// Imprimir Histograma
System.out.print(hpal);
// Imprimir una línea en blanco
System.out.println();
}
// Imprimir histograma global
System.out.print(global);
}
}
class Histograma {
enum Letras {a,b,c,d,e,f,g,h,i,j,k,l,m,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z};
private int[] _frecuencias;
public Histograma(){
_frecuencias = new int[Letras.values().length];
}
public void aumentaFrecuencias(String s){
for (int i=0; i < s.length(); i++){
_frecuencias[Letras.valueOf(s.substring(i, i+1)).ordinal()]++;
}
}
@Override
public String toString(){
StringBuffer sb = new StringBuffer();
for (Letras l:Letras.values() ){
if (_frecuencias[l.ordinal()] > 0){
String name=l.name();
sb.append(name+": ");
for (int i=1; i <= _frecuencias[l.ordinal()]; i++ ){
sb.append('+');
}
sb.append("\n");
}
}
return sb.toString();
}
}