统计字母个数
给定一段文章,请输出每个字母出现的次数
输入
只有一组输入数据,文件少于1000行。在文章中除最后一个字符外,只有大小写字母、空格和换行符,没有另外的标点、数字。该文章以’#’结尾。
输出
输出格式为“C A”,C为’a’..’z’中的字母,A为出现次数,C和A之间空一格
样例输入
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
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl '\n'
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
map<char,int> m;
string b;
getline(cin, b, '#');
// istream& getline ( istream &is , string &str , char delim );delim 终结符,遇到该字符停止读取操作,不写的话默认为回车。
int i=0;
while(i < b.length()){
++m[tolower(b[i])];//tolower函数将大写字母转换为小写字母,这里根据题目意思可知不论输入的文章是大写还是小写,最后统计时都将其转换为小写字母统计
i++;
}
for(char i='a';i<='z';i++){
cout<<i<<" "<<m[i]<<endl;
}
return 0;
}
注意:
1、当getline与whlie一起使用的时候,即while(getline(cin,str))是一个死循环,只有当按Ctrl+z或键入EOF才会结束。
2、当使用getline的时候,如果前面用cin输入东西,则必须输入cin.get()吃掉回车符
单词统计问题
HH公司(huge-hard)最近计划出品一个字处理软件。软件基本功能已经完成,但还缺少一个单词统计的功能,你的任务就是为该公司写一段程序,完成统计功能。
需要统计的信息有两项:出现单词的个数和单个单词出现的次数。
输入
输入为一行字符串,即要统计的文本。
输出
输出由若干行组成,第一行是一个整数,表示单词的个数,从第二行开始,每行由字符串、冒号、整数组成,其中字符串是一个出现在文本中的单词,整数则是该单词在文本中出现的次数。
样例输入
to know everything is to know nothing
样例输出
7 everything:1 is:1 know:2 nothing:1 to:2
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl '\n'
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
map<string,int>m;
string st1;
int count=0;
while(cin>>st1){
++m[st1];
count++;
}
cout<<count<<endl;
for(auto st:m){//这里auto使用的是pair类型
cout<<st.first<<":"<<st.second<<endl;
}
return 0;
}