输入若干的字符串,每个字符串中只包含数字字符和大小写英文字母,统计字符串中有出现的不同字符的出现次数。
输入格式:
测试数据有多组,处理到文件尾。每组测试输入一个字符串(不超过80个字符)。
输出格式:
对于每组测试,按字符串中有出现的字符的ASCII码升序逐行输出不同的字符及其个数(两个数据之间留一个空格),每两组测试数据之间留一空行,输出格式参照输出样例。
输入样例:
12123
A1c1B
输出样例:
1 2
2 2
3 11 2
A 1
B 1
c 1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路分析:
新建一个结构体s,包括,name,cnt.当s[i]不等于0时,对从s首项开始,从s+1开始,看看后面有没有相同的数,有,cnt就加一,后面那个数赋值为0,进行标记。循环结束,cnt,name赋给结构体数组q[k],k++.前面定义一个k=0。输入若干的字符串,每个字符串中只包含数字字符和大小写英文字母,统计字符串中有出现的不同字符的出现次数。建立一个排序函数,s.name<t.name.
注意:
If语句实现时,条件判断相等不能粗心地写成赋值号!
代码实现:
#include<iostream>
#include<algorithm>
using namespace std;
struct g {string name;int cnt;
};
bool cmp(g a,g b){return a.name<b.name;
}
int main() {string s;g q[101];int f=0;while(cin>>s){int k=0;for(int i=0;i<s.size();i++){if(s[i]!=0){int d=1;for(int j=i+1;j<s.size();j++){if(s[i]==s[j]){d++;s[j]=0;}}q[k].cnt=d;q[k].name=s[i];k++;}}sort(q,q+k,cmp);if(f!=0)cout<<endl;for(int i=0;i<k;i++)cout<<q[i].name<<" "<<q[i].cnt<<endl;f++;}return 0;
}
运行结果: