#include<iostream>
#include<map>
#include<cstring>
using namespace std;
map<char,int> mp;
void cbchar(char* cc,int* bb,string &a){
for(int i=0;a[i];++i){
mp[a[i]]++;
}
int l=0;
for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++){
// cout<<it->first<<':';
// cout<<it->second<<endl;
bb[l]=it->second;
cc[l]=it->first;
l++;
}
}
int main(){
string a;
cin>>a;
int b[100];
char c[100];
cbchar(c,b,a);
int lengthc=strlen(c);
int lengthb=0,lengthd=0;
for(int i=0;b[i];++i){
lengthb++;
}
for(int i=0;c[i];++i){
lengthd++;
}
cout<<lengthc<<' '<<lengthb<<' '<<lengthd<<endl;
for(int i=0;c[i];++i){
cout<<c[i]<<':'<<b[i]<<endl;
}
}
输入qqqqq
输出:
qqqqq
3 1 3
0
q:5
:0
I:4754240
这就很奇葩了,我那个数组c怎么是三个元素???
然后我进行测试:
#include<iostream>
#include<map>
#include<cstring>
using namespace std;
map<char,int> mp;
void cbchar(char* cc,int* bb,string &a){
for(int i=0;a[i];++i){
mp[a[i]]++;
}
int l=0;
cout<<"map的大小:";
cout<<mp.size()<<endl;
for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++){
cout<<"map里面的值:" ;
cout<<it->first<<':';
cout<<it->second<<endl;
bb[l]=it->second;
cc[l]=it->first;
l++;
cout<<"map遍历次数:"<<l<<endl;
}
int len=strlen(cc);
cout<<"cc数组里面的字符个数:"<<len<<endl;
for(int i=0;i<len;++i){
cout<<i<<":" <<cc[i]<<endl;
}
}
int main(){
string a;
cin>>a;
int b[100];
char c[100];
cout<<"c数组之前的元素个数:"<<strlen(c)<<endl;
cbchar(c,b,a);
for(int i=0;c[i];++i){
cout<<c[i]<<':'<<b[i]<<endl;
}
}
/*
qqqqq
c数组之前的元素个数:3
map的大小:1
map里面的值:q:5
map遍历次数:1
cc数组里面的字符个数:3
0:q
1:
2:p
q:5
?
*/
原来直接定义一个字符数组,但是不赋值,它里面还有元素,并不是说里面直接就是一个’\0’。
我这个里面c就是初始什么都不赋值时侯,竟然有三个元素。。。卧槽写这么长时间c语言,我才发现这个bug。
看来我得回炉重造了。。。
那么解决这个bug,就是在初始化时候加个花括号。char c[100]={};
#include<iostream>
#include<map>
#include<cstring>
using namespace std;
map<char,int> mp;
void cbchar(char* cc,int* bb,string &a){
for(int i=0;a[i];++i){
mp[a[i]]++;
}
int l=0;
cout<<"map的大小:";
cout<<mp.size()<<endl;
for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++){
cout<<"map里面的值:" ;
cout<<it->first<<':';
cout<<it->second<<endl;
bb[l]=it->second;
cc[l]=it->first;
l++;
cout<<"map遍历次数:"<<l<<endl;
}
int len=strlen(cc);
cout<<"cc数组里面的字符个数:"<<len<<endl;
}
int main(){
string a;
cin>>a;
int b[100];
char c[100]={};
cout<<"c数组之前的元素个数:"<<strlen(c)<<endl;
cbchar(c,b,a);
for(int i=0;c[i];++i){
cout<<c[i]<<':'<<b[i]<<endl;
}
}
/*
qqqqq
c数组之前的元素个数:0
map的大小:1
map里面的值:q:5
map遍历次数:1
cc数组里面的字符个数:1
q:5
*/