如何解释下列的代码?

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:01:00
void fun(char str[])
{
int a[128]={0};
for(int i=0;str[i];i++)
a[str[i]]++;
for(i=0; i<128;i++)
{
if(a[i]!=0)
cout<<char(i)<<" ,"<<a[i]<<endl;
}
}

void main()
{
char s[40]="hello";
fun (s);
}

最好给出主每行的注释?
结果:e ,1
h ,1
l ,2
o ,1

为什么会有这个结果呢?麻烦说明一下,谢谢

void fun(char str[])
{
int a[128]={0}; //开辟128长度的整数的空间
for(int i=0;str[i];i++) //对整个字符串str进行查找
a[str[i]]++; //对每个字符进行计数,数目用数组a中的对应空间存储
for(i=0; i<128;i++)
{
if(a[i]!=0) //假如该字符个数不为零则输出字符和对应的个数
cout<<char(i)<<" ,"<<a[i]<<endl; //输出格式
}
}

void main()
{
char s[40]="hello"; //测试的字符串
fun (s); //调用函数
}

程序输出:
e ,1
h ,1
l ,2
o ,1

---
因为按照ANSI的顺序,是e<h<l<o.
因为e,h,o出现1次,l出现2次,所以按照顺序输出之后就是结果。