问答题 编写函数void fun(char*tt,int PP[]),统计在tt所指的字符串中“a”到“z”26个小写字母各自出现的次数,并依次放在PP所指的数组中。 例如,当输入字符串“abcdefgabcdeabc”后,程序的输出结果应该是: 3 3 3 2 2 1 1 0000000000000000000 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 试题程序: #include<sfdio.h> #include<string.h> void fun(char*tt,int pp[]) { } main() { char aa[1000]; int bb[26],k; printf("/nPlease enter a char string:"); scanf("%s",aa); funiaa,bb); for(k=0;k<26;k++) printf("%d",bb[k]); printf("/n"); }
【正确答案】void fun(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') /*使统计小写字母个数的数组pp中的对应元素加1*/ pp[*tt-'a']++; }
【答案解析】[解析] 本题关键字有:for循环语句;数组操作;if语句条件表达式;字符串结束标识‘/0’;指针操作。 [微分析] 先使用for循环语句初始化pp数组中各元素为0,再通过循环判断语句判断tt所指字符串中的字符是否为小写字母,若是则相对应的pp数组元素值加1。