数组输出的值与输入值不一致

本意是想把输入的26个字母中每个字母出现的次数存放在一个数组中,同时把出现的字母也存放在一个数组中
字母和数字在数组中的顺序相同
{#include
using namespace std;
int main(){
int n=26; char a; //输入的字母
char ch[n]; //存储字母
char ex[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; //作对比
int count=0; //计数(字母种数)
int num[26]={0}; //对应字母出现次数
int weight;
int w[count]; //权值不为 0的字母的权值
char ch2[count];
cout<<"输入26个字母:"<<endl;
for(int i=0; i<n; i++){
cin>>a;
ch[i]=a; }
for(int i=0; i<n; i++){ //每个字母对应的权值
int sum=0;
for(int j=0; j<26; j++){
if(ex[i]==ch[j]){
sum++; }
}
num[i]=sum; }
for(int i=0; i<n; i++){
if(num[i]!=0){
cout<<"字母"<<ex[i]<<" 出现次数为: "<<num[i]<<endl;
count++;
} }
cout<<"共有"<<count<<"种不同的字母"<<endl;
for(int k=0;k<count; k++){ // 输入字母及对应 权值
cin>>a>>weight;
ch2[k]=a;
w[k]=weight; }
for(int k=0; k<count;k++){
cout<<w[k]<<" "; }
return 0;}}

ex这个数组完全没有用
因为英文字母的ascii码是连续的,你直接减去'a'就是索引,根本不需要双重for循环去比对
当然,如果输入字符串里有大小写或者其他特殊符号,那判断一下范围,再对应的减'a'或'A',超出0-25范围的直接continue
你逻辑太乱,我根本没细看。你按照上面的思路重新改写一下,代码清晰简洁,就不容易出问题了。