苏州糖果乐园附近酒店:c++语句,帮帮忙解释一下功能好吗?

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/08 02:58:17
从键盘上输入30个字符,统计出数字字符0---9各有多少个。
#include<iostream.h>
void cnt(char s,int m[]);
void main()
{
int m[10]={0}; char s;
for(int i=0;i<30;i++)
{
cout<<"No."<<i+1<<": "; cin>>s;
cnt(s,m);
}
for(i=0;i<10;i++)
cout<<i<<": "<<m[i]<<"个.\n";
}
void cnt(char s,int m[])
{
if(s>='0' && s<='9')
m[s-'0']++;
}

尤其是 m[s-'0']++; 这里我不是很明白. 请解释清楚点好吗,,谢谢您了~~~~~~~~~~~~

m[s-'0']++,首先,s是一个char字符,取值范围在'0'到'9'之间,由于'0'到'9'之间的ASCII码是连续的,那么s-'0'的范围显然在0-9(可以认为是整形数字之间),所以对应的数组单元的计数值增加1

m[s-'0']++; ,其实你运算一下就会知道,那是对0的个数计算在m[0]内,1的个数计算在m[1]内,。。。,9的个数计算在m[9]内,++就是计数了。字符相减就是ASC码之差,所以就可以如果来计算下标值。楼上的回答 很清楚的。
只是我不是很清楚前面有个语句int m[10]={0}; char s; 中是不是把m数组中所有元素的值都赋0了,不然的话,真不知道会不会有错。