编写函数,统计在tt所指的字符串中“a”到“z”26个小写字母各自出现的次数,并一次放在pp所指的数组中.答:void fun (char * tt ,int pp[ ] ){ int i ;for (i=0;i='a'&&*tt
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 09:12:29
编写函数,统计在tt所指的字符串中“a”到“z”26个小写字母各自出现的次数,并一次放在pp所指的数组中.答:void fun (char * tt ,int pp[ ] ){ int i ;for (i=0;i='a'&&*tt
编写函数,统计在tt所指的字符串中“a”到“z”26个小写字母各自出现的次数,并一次放在pp所指的数组中.
答:
void fun (char * tt ,int pp[ ] )
{ int i ;
for (i=0;i='a'&&*tt
编写函数,统计在tt所指的字符串中“a”到“z”26个小写字母各自出现的次数,并一次放在pp所指的数组中.答:void fun (char * tt ,int pp[ ] ){ int i ;for (i=0;i='a'&&*tt
如果是pp[0]++;你能理解吗?++是自增运算符,如比pp[0]++就相当于:pp[0]=pp[0]+1;
那么*tt-'a'是什么意思呢?这是两个字符的运算,其实字符在电脑中是用一个字节表示的ASCII码,比如'a'这个字符,在电脑中表示为97,而b,c,d,……是依次递增的,两个字符在C语言中可以直接加减,其结果就是两个字符所对应的ASCII码的加减,所以假如*tt=='a'的话,*tt-'a'的结果就是0,假如*tt=='b'的话,那么*tt-'a'的结果就是1,以此类推.所以整个函数的意思是,对tt所指的字符串逐个进行检测,如果是小写的a-z之间的字符,那么每出现一次a,pp[0]就增加1,每出现一次b,pp[1]就增加1,直到字符串结束,pp数组中就分别存在了对应字符出现的次数.
但程序中有两次错误,一个是循环语句 for ( ; *tt!='\0' ; *tt++)中,最后一个*应该不要掉,改成 for ( ; *tt!='\0' ; tt++)这样才有意义,否则的话每次循环都是修改*tt中的内容,而不是逐个检查字符串中的字符.还有一处是pp[*tt-'a']++ 后面必须加分号; .