Ignatius现在正在做作业。老师给了他一些文章,并要求他说出每个字母的出现次数。 真的很简单,不是吗?
输入格式:
多组输入。每一篇文章只有一行,所有的字母都是小写字母。你只需要计算每个字母的数量,所以不要注意其他字符。文章的长度最多是100000。处理到文件的末尾。
输出格式:
对于每一篇文章,你必须说出每封信的出现次数。输出格式类似“x:n”。
输入样例:
hello, this is my first acm contest!
work hard for hdu acm.
输出样例:
a:1
b:0
c:2
d:0
e:2
f:1
g:0
h:2
i:3
j:0
k:0
l:2
m:2
n:1
o:2
p:0
q:0
r:1
s:4
t:4
u:0
v:0
w:0
x:0
y:1
z:0
a:2
b:0
c:1
d:2
e:0
f:1
g:0
h:2
i:0
j:0
k:1
l:0
m:1
n:0
o:2
p:0
q:0
r:3
s:0
t:0
u:1
v:0
w:1
x:0
y:0
z:0
思路:
C++ AC
- 由于输入的是带空格的几行字符串 所以应该用getline
- 没说几个字符串,所以需要while 输入 最后ctrl z 手动退出输入
- 设定一个计数数组 0-26分别对应26个字母,对应关系需要用ascll码来计算。
- 题目里说了字符串是由小写字符构成,故我们需要的ascll码范围是97到122
#include
#include
using namespace std;
int main()
{string str="";//26个字母,所以开30的数组就可以int cnt[30];//输入while(getline(cin,str)){//每次进行初始化for(int i=0; i<30; i++){cnt[i]=0;}for(int i=0; i<str.size(); i++){int tmp=str[i]-0;//其实这里就是将字符转化为ascll码//如果是字母 (这里字母a是97 z是122 )if(tmp>=97&&tmp<=122){//减97之后,a对应的数组下标是0.....z对应的下标是25cnt[str[i]-97]++;}}//对每个进行输出for(int i=0; i<26; i++){cout<<char(i+97)<<":"<<cnt[i]<<endl;}}return 0;
}