请教一个求输入字符的种类、个数的问题
代码如图:

例如输入 CSDN。
若没圈出的那两句输出为:
有有那两句则输出正确:
想问下:圈出的两句的意思是不是“若为空格则跳出”?
还有为什么这两句改变的这么多,怎么解释?
Ps: 用的是code::blocks
代码为:
#include <iostream>
using namespace std;
int main()
{
cout<<"string : "<<endl;
const int N=200;
char cha[N],letters[N];
int k,i,counts[N]={0};
cin.getline(cha,N,'\n');
for(i=0;i<=N;i++)
{
if (cha[i]=='\0')
break;
k=tolower(cha[i]);
counts[k]++;
}
for(k=0;k<=N;k++)
{
letters[k]=(char)(k);
if(counts[k]>0)
cout<<letters[k]<<": "<<counts[k]<<endl;
}
return 0;
}
多谢~
[解决办法]
C数组以'\0'结尾,过了'\0'之后后面的就都是无效区域了。如果不加的话,for循环会一直运行201次,并统计那些不属于你输入内容的不可知随机数据。
[解决办法]
char cha[N] = {0}; // 或用之前memset[code=c]
const int N = 200;
for(k=0; k<=N; k++) // 这里好像不能等于N了,可能会有问题的
{
letters[k]=(char)(k);
if(counts[k]>0)
cout<<letters[k]<<": "<<counts[k]<<endl;
}
[code=c]