问答题
请编写一个函数void proc(char *tt, int pp[]),统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。
例如,当输入字符串abcdefghxyzabcdeffe后,程序的输出结果应该是:2 2 2 2 3 3 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#ihclude<stdlib.h>
void proc(char*tt,int pp[])
{
}
void main()
{
char str[1000];
int bb[26], k;
system("CLS");
printf("/nPlease enter a char string: ");
scanf("%s", str);
proc(str, bb);
for(k=0; k<26; k++)
printf("%d", bb[k]);
printf("/n");
}
【正确答案】
【答案解析】void proc(char*tt, int pp[])
{
int i;
for(i=0; i<26; i++) //pp数组是放字母的个数,因此其初始值都为0
pp[i]=0;
for(; *tt!="/0"; tt++)
if(*tt>="a"&&*tt<="z") //在tt字符串中“a”到“z”26个字母各自出现的次数
pp[*tt-"a"]++; //依次放在PP所指数组中
}
[解析] 由函数proc()可知,数组pp中存放26个字母各自出现的次数,初始化为0。然后判断字符串tt中每一个字符,每检查一个字符。将数组pp中相应的元素加1。