【华为机试】字符统计
2017-07-30 21:15
232 查看
题目描述
如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。
输入描述:
输入一串字符。
输出描述:
对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
示例1
输入
aadddccddc
输出
dca
分析:先用一个大小为63的容器记录出现的字符的个数,在定义一个结构体分别定义字符本身和字符个数,把出现的字符个数和字符本身保存到结构体容器中,在对结构体容器按要求排序。
改进方法:用一个大小128的容器记录出现的字符个数,太菜了竟然不知道有pair<>的存在,用了个结构体,现在用pair<>替代结构体的部分,总体代码简洁了不少。
如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。
输入描述:
输入一串字符。
输出描述:
对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
示例1
输入
aadddccddc
输出
dca
分析:先用一个大小为63的容器记录出现的字符的个数,在定义一个结构体分别定义字符本身和字符个数,把出现的字符个数和字符本身保存到结构体容器中,在对结构体容器按要求排序。
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; struct charnum{ int num; char its; }; bool comnum(charnum a,charnum b){ if(a.num==b.num) return a.its<b.its; //按ASCII排序; return a.num>b.num; //按个数排序; } inline void countchar(string s){ if(s.empty()) return; int i=0; vector<int> count(63,0); while(i<s.size()){ //记录每个字符的个数; if(s[i]>='a'&&s[i]<='z') count[s[i]-'a']++; else if(s[i]>='A'&&s[i]<='Z') count[s[i]-'A'+26]++; else if(s[i]>='0'&&s[i]<='9') count[s[i]-'0'+52]++; else if(s[i]==' ') count[62]++; ++i; } vector<charnum> tt; //把字符和个数保存在结构体容器; for(int i=0;i<count.size();++i){ if(count[i]==0) continue; charnum t; if(i<26) {t.num=count[i];t.its=i+'a';} else if(i<52) {t.num=count[i];t.its=i-26+'A';} else if(i<62) {t.num=count[i];t.its=i-52+'0';} else {t.num=count[i];t.its=' ';} tt.push_back(t); } sort(tt.begin(),tt.end(),comnum); //按要求排序; for(int i=0;i<tt.size();++i){ cout<<tt[i].its; } cout<<endl; } int main(){ string s; while(getline(cin,s)) countchar(s); return 0; }
改进方法:用一个大小128的容器记录出现的字符个数,太菜了竟然不知道有pair<>的存在,用了个结构体,现在用pair<>替代结构体的部分,总体代码简洁了不少。
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; bool comnum(pair<char,int> a,pair<char,int> b){ if(a.second==b.second) return a.first<b.first; return a.second>b.second; } inline void countchar(string s){ if(s.empty()) return; vector<int> count(128,0); for(int i=0;i<s.size();++i) if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'||s[i]>='0'&&s[i]<='9'||s[i]==' ') count[s[i]]++; vector<pair<char,int>> tt; for(int i=0;i<128;++i){ if(count[i]!=0) tt.push_back(make_pair(i,count[i])); } sort(tt.begin(),tt.end(),comnum); for(int i=0;i<tt.size();++i){ cout<<tt[i].first; } cout<<endl; } int main(){ string s; while(getline(cin,s)) countchar(s); return 0; }
相关文章推荐
- 牛客网_华为机试_010_字符个数统计
- 华为机试在线训练-牛客网(40)字符统计
- 华为机试——字符统计
- 牛客网--华为机试在线训练10:字符个数统计
- 华为机试——字符个数统计
- 华为机试: 计算字符串的相似度、输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数
- 华为机试——字符个数统计
- 华为机试 字符个数统计
- 牛客网三道编程题(三 之华为机试在线训练(二)字符串反转、统计不同字符个数、删除字符串中出现最少的字符
- 华为机试(取近似值,合并表,提取不重复整数,字符个数统计)Java实现
- 【华为机试】字符个数统计
- 华为机试—统计字符次数
- 华为机试:字符个数统计、提取不重复的整数
- 华为机试—统计字符次数
- 《华为机试在线训练》之字符个数统计
- Java - 华为机试训练 - 字符个数统计
- 华为机试:放苹果、字符统计
- 【华为机试】字符个数统计
- 华为机试 统计字符个数
- 【华为OJ40】输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数