首页 > 代码库 > 华为机试—单词计数
华为机试—单词计数
输入一段文章,输出最高频与次高频的单词(全部小写,逗号分隔)。文章中仅出现空格,逗号和句号这三种分隔符。
测试结果,可能想的不周全,欢迎查漏补缺:
不考虑频率一致的情况。忽略大小写。
输出:i,xidian
#include <iostream> #include <string> #include <stdlib.h> using namespace std; #define N 2048 int compare(const void *p,const void *q){ return *(int *)p-*(int *)q; } //大写转小写 string tolow(string s){ for(int i=0;i<s.length();i++) if(s[i]>='A'&&s[i]<='Z') s[i]=s[i]+32; return s; } void process(string tmp) { string word[N]={""};//存单词 int num[N]={0};//存单词个数 int num2[N]={0};//存单词个数,因为中间排序对num数组变动,用num2存储排序之前的单词个数 int m=0,i,j; string str=""; for (i=0;i<tmp.length();i++) { if (tmp[i]==' ' || tmp[i]==',' || tmp[i]=='.') { word[m++]=str; str=""; } else { //在下标为str.length()的字符之前插入1个字符tmp[i] str.insert(str.length(),1,tmp[i]); } } for (i=0;i<m;i++) for(j=0;j<m;j++) if (word[i]==word[j]){ num[i]++; num2[i]++;//两个其实一样 } qsort(num,m,sizeof(int),compare); int max_num = num[m-1];//最大频率索引 int second_num = num[m-2];//第二大索引 for(i=3;i<m;i++) if(second_num==max_num) second_num=num[m-i]; for (i=0;i<m;i++) { if (num2[i]==max_num) { cout<<tolow(word[i]); break; } } cout<<","; for (i=0;i<m;i++) { if (num2[i]==second_num) { cout<<tolow(word[i])<<endl; break; } } } void main() { string in; getline(cin,in); process(in); }
测试结果,可能想的不周全,欢迎查漏补缺:
华为机试—单词计数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。