方法1
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char a[1000];
int b[10]={0};
cin>>a;
int l=strlen(a);//sizeof=1000
cout<<"length:"<<l<<endl;
for(int i=0;i<l;i++){
b[a[i]-48]++;
}
for(int j=0;j<10;j++)
{
if(b[j]!=0)
cout<<j<<":"<<b[j]<<endl;
}
}
需要注意的两个地方
1、输入为止长度的数用char数组直接cin>>数组名
2、求长度的时候注意用strlen,sizeof求的是数组空间长度
方法2
用getchar()放在缓存区,直到用户输入回车(\n)
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
char a;
int b[10]={0};
while((a=getchar())!='\n'){
b[a-48]++;
}
for(int j=0;j<10;j++)
{
if(b[j]!=0)
cout<<j<<":"<<b[j]<<endl;
}
}
注意就是getchar的头文件是#include<stdio.h>
方法3
这个是我向别人学来的
#include<iostream>
#include<map>
#include<string.h>
using namespace std;
map<int,int> mp;
int main(){
char a[1000];
cin>>a;
for(int i=0;i<strlen(a);i++){
mp[a[i]-48]++;
}
map<int,int>::iterator it =mp.begin();
while(it!=mp.end()){
cout<<it->first<<":"<<it->second<<endl;
it++;
}
}
map用为映射,是常用的STL容器
1、头文件
#include
2、定义
map<typename,typename>mp;
注意如果是字符串到整形的映射,必须是string
3、map容器内元素的访问
①通过下标访问
【注意】map的键是唯一的
mp[‘c’]=20;
②通过迭代器访问
定义方式与其他STL容器迭代器相同
【不同】
map迭代器的使用方式和其他STL容器的迭代器不同
因为map的每一对映射都有两个typename
这决定了必须通过一个it来同时访问键和值
事实上,map可以使用it->first来访问键
使用it->second来访问值
在建立映射的过程中会自动实现从小到大的排序功能
4、map常用函数
①find()
find(key)返回键是key的映射的迭代器
②erase()
(1)删除单个元素
a.mp.erase(it),it为需要删除的元素的迭代器
b.mp.erase(key),key为欲删除的映射的键
e.g.mp.erase(‘c’);
(2)删除一个区间内的所有元素
还是左闭右开
(3)size()
用来获得map中映射的次数
(4)clear()
清空