BIT2009年上机题第四题

来源:互联网 发布:android json解析库 编辑:程序博客网 时间:2024/06/07 23:05


题目要求

输入一个英文句子,把句子中的单词按出现次数按从多到少把单词和次数在屏幕上输出来,要求能识别英文句号和逗号,即是说暂不要求识别其他符号


解题思路

1.刚开始的思路是直接将句子读取到string里面,然后在一一解析,但是思路不通,string的长度是1,具体原因不清楚。

2.看到一些大神的思路,才意识到应该是边读边解析。

3.用map来存储数据,该如何根据value进行排序呢,网上有说用vector的,我觉得这个是个好思路,暂时还未实现。

先用如下的代码来实现伪排序

好吧,这道题又不是我独立完成的,大笑PS:我啥时候能够独立完成一道题目嘞


期间遇到了一些小的BUG

1.如果连续的空格,“,”,“.”会出错

2.如果最后一个字符不是符号会出错


经过修改测试,最终成果终于完成。


代码如下


#pragma warning (disable:4786)#include<iostream>#include<map>#include<string>using namespace std;int main(){char s[20],ch;map<string,int> mmap;int i=0;map<string,int>::iterator it;int count;while((ch=cin.get())!='\n'){if(ch!=' '&&ch!=','&&ch!='.'){ //是字母s[i++]=ch;}else{s[i]='\0';if(s[0]!='\0'){it =mmap.find(s);if(it!=mmap.end()){count = (*it).second;mmap[s]=count+1;}else{mmap[s]=1;}}strcpy(s,"");i=0;}}if(s[0]!='\0'){it =mmap.find(s);if(it!=mmap.end()){count = (*it).second;mmap[s]=count+1;}else{mmap[s]=1;}strcpy(s,"");i=0;}map<string,int>::iterator max;while(!mmap.empty()){max = mmap.begin();for(it=mmap.begin();it!=mmap.end();it++){if(it->second>max->second)max=it;}cout<<max->first<<":"<<max->second<<endl;mmap.erase(max);}return 0;}


0 0
原创粉丝点击