题目描述:
输入一个英文句子,把句子中的单词(不区分大小写)按出现次数按从多到少把单词和次数在屏幕上输出来,要求能识别英文句号和逗号,即是说单词由空格、句号和逗号隔开。
输入描述:
输入有若干行,总计不超过1000个字符。
输出描述:
示例1
输入
A blockhouse is a small castle that has four openings through which to shoot.
输出
a:2
blockhouse:1
castle:1
four:1
has:1
is:1
openings:1
shoot:1
small:1
that:1
through:1
to:1
which:1
解题思路:
主要是把单词给取出来,单词是用空格、逗号或句号分割,用这个做判断条件,把单词给取出来。
用map容器把所有的单词给保存下来
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
string str;
while(getline(cin,str)){
map<string,int> m;//map函数用来保存单词和单词出现的次数
string temp_str;
for(int i=0;i<str.size();i++){
if(str[i]==' '||str[i]==','||str[i]=='.'){//判断一个单词是否结束,用这个作为判断,如果判断条件取反,并且将上下语句交换会出现一个测试例(at:1不通过,有兴趣的可以试一下
if(temp_str!="")m[temp_str]++;
temp_str="";//单词存入容器后将字符串置空
}
else{
temp_str+=tolower(str[i]);//将所有字符转换为小写存入临时temp_str
}
}
for(auto it=m.begin(); it!=m.end(); it++){//迭代器输出单词和单词出现的次数
cout<<it->first<<":"<<it->second<<endl;
}
}
return 0;
}