做了一道网申面试题:请使用你熟悉的编程语言(答题时请标注出是何种语言)实现一个函数,用于统计一个输入字符串中各个不同字符出现的次数。主要使用C++stl容器来实现,比较方便。
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<char, int> m; //建立一个由英文字符映射至出现次数的集合
map<pair<char,char> ,int> n;//建立一个由中文字符映射至出现次数的集合
map<int,pair<char,char> > u;//建立一个过渡集合,用来存储每个出现过的中文字符
string s;
int i;int j=0;
getline(cin,s); //输入一个字符串,以回车结束
for(i=0;i<s.size();i++){
if ((s[i] & 0x80)!=0) {
u[j].first=s[i];
u[j].second=s[i+1]; //若检测为中文字符,则按出现顺序拆分存储至pair集合
i++;
n[u[j ] ]++; //对重复出现的pair集合进行计数
j++; }
else
m[s[i] ]++; } //若为英文字符,则对重复出现的字符进行计数
for(map<char, int>::iterator t=m.begin();t!=m.end();t++)
cout<<"字符"<<t->first<<"出现的次数为"<<t->second<<"次"<<endl;
for(map<pair<char,char>, int>::iterator p=n.begin();p!=n.end();p++)
cout<<"字符"<<p->first.first<<p->first.second<<"出现的次数为"<<p->second<<"次"<<endl;
return 0;
}
测试用例:Zeng Tian HAO 是我
输出:
Zeng tian hao 是我
字符 出现的次数为3次
字符Z出现的次数为1次
字符a出现的次数为2次
字符e出现的次数为1次
字符g出现的次数为1次
字符h出现的次数为1次
字符i出现的次数为1次
字符n出现的次数为2次
字符o出现的次数为1次
字符t出现的次数为1次
字符是出现的次数为1次
字符我出现的次数为1次