单词统计问题

1.3k 词

题目描述

HH公司(huge-hard)最近计划出品一个字处理软件。软件基本功能已经完成,但还缺少一个单词统计的功能,你的任务就是为该公司写一段程序,完成统计功能。

需要统计的信息有两项:出现单词的个数和单个单词出现的次数。

输入

输入为一行字符串,即要统计的文本。

输出

输出由若干行组成,第一行是一个整数,表示单词的个数,从第二行开始,每行由字符串、冒号、整数组成,其中字符串是一个出现在文本中的单词,整数则是该单词在文本中出现的次数。

样例输入

1
to know everything is to know nothing

样例输出

1
2
3
4
5
6
7
everything:1
is:1
know:2
nothing:1
to:2

题解

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<bits/stdc++.h>
using namespace std;
string s[1000];
string t;
string k;
int n,cnt;
int main(){
n=0;
while(cin>>t)s[n++]=t;
sort(s,s+n);
cout<<n<<endl;
k=s[0];
cnt=1;
for(int i=1;i<n;i++){
if(s[i]==k)++cnt;
else {
cout<<k<<":"<<cnt<<endl;
k=s[i];
cnt=1;
}
}
cout<<k<<":"<<cnt<<endl;
return 0;
}

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {
static Scanner cin = new Scanner(System.in);

public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>();
int cnt = 0;
while (cin.hasNext()) {
String word = cin.next();
++cnt;
if (!map.containsKey(word)) {
map.put(word, 1);
} else {
int old = map.get(word);
map.put(word, old + 1);
}
}
System.out.println(cnt);
for (String key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}

}
}