IMAUOJ-1245 Problem E:统计字母个数

题目描述

给定一段文章,请输出每个字母出现的次数。

输入

只有一组输入数据,该数据大小<10KB。在文章中除最后一个字符外,只有小写字母、空格和换行符,没有另外的标点、数字和大写字母等。该文章以“#”结尾。

输出

输出格式为“C N”,C为“a”...“z”中的字母,N为出现次数,C和N之间空一格。

样例输入

here is the input
this is the article#

样例输出

a 1
b 0
c 1
d 0
e 5
f 0
g 0
h 4
i 5
j 0
k 0
l 1
m 0
n 1
o 0
p 1
q 0
r 2
s 3
t 5
u 1
v 0
w 0
x 0
y 0
z 0

个人题目思路

首先解决多行输入的问题,即读入回车键的问题:JAVA中没有直接读入回车输入的办法(或者暂时还没学),则利用循环实现多行输入,创建一个BOOL FLAG并初始化TRUE,在while(.hasnext())里若为true则继续.nextline(),否则结束循环,且每次输入时,都对字符串进行charAt(i)遍历,若读到“#”,则falg为false(注意在循环后继续判断是否需要跳出循环)。
然后是统计字母个数的问题:创建一个int数组,长度26,用于保存每一个字母对应的出现数量。在对字符串进行charAt(i)遍历同时,创建一个for(int j = 97; j <= 122; j++),如果charAt(i)等于j,则让对应的num[j-97]++。

源代码

import java.util.Arrays;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner cn = new Scanner(System.in);
        String str;
        int[] num = new int[26];
        Arrays.fill(num, 0);//初始化
        boolean flag = true;
        while (cn.hasNext()) {
            if (flag)
                str = cn.nextLine();
            else
                break;
            for (int i = 0; i < str.length(); i++) {
                if (str.charAt(i) == '#')
                    flag = false;
                for (int j = 97; j <= 122; j++) {
                    if (str.charAt(i) == j)
                        num[j - 97]++;
                }
            }
            if (!flag)//注意不要漏掉此项,否则会多输入一行
                break;
        }
        for (int i = 0; i < 26; i++) {
            System.out.println((char) (i + 97) + " " + num[i]);
        }
    }
}

 

你可能感兴趣的:(练习,JAVA,OJ)