请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中“a”到“ z”26个字母各自出现的次数,并依次放在pp所指数组中。 例如:当输入字符串abcdefghabcdeabc后,程序的输出结果应该是:33322110

admin2010-05-05  57

问题 请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中“a”到“ z”26个字母各自出现的次数,并依次放在pp所指数组中。
   例如:当输入字符串abcdefghabcdeabc后,程序的输出结果应该是:33322110000000000000000000
   注意:部分源程序给出如下。
   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
   试题程序:
    #include <conio.h>
   #include <stdio.h>
   void fun (char*tt, int pp[])
   {
   }
   main()
   {
    char aa[1000];
    int bb[26], k, n;
    clrscr();
    printf("\nPlease enter a char string: ") ;
    scanf("%s",aa);
    fun(aa,bb);
    for (k=0 ;k<26 ; k++)
      printf("%d ",bb[k]) ;
    printf("\n ");
   }

选项

答案void fun(char*tt,int pp[] ) { int i; fori=0;i<26;i++) pp[i]=0; /*初始化pp数组各元素为0*/ for(;*tt!=’\0’;tt++) if(*tt>=’a’&&*tt<=’z’) pp[*tt-’a’]++; /*将tt字符串中’a’到’z’26个字母各自出现的次数,依次放在pp数组中,任一个小写字 母减去’a’后所得结果正好是它对应的下标*/ }

解析 第1个循环的作用是初始化数组pp,未经赋值变量的量为一个不确定数字。由于它要将’a’到’z’26个字母的个数依次放到数组pp中。即’a’的个数存于pp[0]中,’b’的个数存于pp[1]中,’c’的个数存于pp[2]中,…,依次类推。而’a’-’a’的值正好为0,’b’-’a’的值为1,’c’-’a’的值为2,…,依此类推。即任一个小写字母减去’a’后所得结果正好是它对应的下标,所以就有了pp[*tt-’a’]++。但*tt必须是小写字母即if()不应省略。
转载请注明原文地址:https://jikaoti.com/ti/1SkiFFFM
0

最新回复(0)