C语言编程:从键盘输入若干英文单词,以”@@@”字符串作为结束,统计单词出现的频数。

Python038

C语言编程:从键盘输入若干英文单词,以”@@@”字符串作为结束,统计单词出现的频数。,第1张

#include<stdio.h>

#include<string.h>

/********************************************/

struct word_num

{

    char ws[21]

    int count   

}

typedef struct word_num WRD

int find(WRD a[], char *t,int n)

/********************************************/

int  main()

{

WRD s[MAX]//定义结构体数组,用来保存不重复的单词

char t[21]

int i=0,k,j//i:单词总数,初始值是0

while(scanf("%s",&t)!=EOF) //循环输入,"@@@"或者Ctrl+z结束循环

    //可以改为while(1),只能用"@@@""结束循环

{

    if(strcmp(t,"@@@")==0)//是否要结束循环

        break

    s[i].count=0//第i个单词计数器初始化:开始肯定是0

    k=find(s,t,i) //确认输入单词t在数组s中的保存位置:

    //  如果重复,得到重复单词在结构体数组的下标位置,

    //  不重复,返回总单词数量i,即表明保存到s[i]

    strcpy(s[k].ws,t)//保存进数组

    s[k].count+=1//该单词计数器加1.

    if(k==i)i++  //如果不重复,总单词计数器增加  

}

for (j=0j!=ij++)//输出.i是总数

{

    printf("%s,%d\n",s[j].ws,s[j].count )

    }

return 0

}

/********************************************/

int find(WRD a[], char  t[],int n)

{

    int i

    for(i=0i<ni++)

    {

        if(strcmp(a[i].ws,t)==0)//相等,说明已存在该词,返回该词在数组中的序号

           {

           // printf("%s\n", t)

            break  //退出循环,i的位置即单词位置下标值

        }      

    }

    return i

}

看我旁边做的注解

cnt(s,array)/*调用子函数cnt,并传给参数s, array。s是字符数组,相当于字符串指针;array是数组好理解*/

for(i=0i<26i++)

printf("%d",array[i]) /* for循环 依次输出26个字母出现的次数。这里%d后面加个空格或逗号分隔才好 */

printf("\n")

子函数

void cnt(char *p,int arr[]) /* 第一个参数是字符串指针,第二个参数是整型数组 */

{

int i

for(i=0i<26i++) /*数组初始化*/

arr[i]=0 /* 26个字母的个数全初始设置为0 */

while(*p) /* 循环,*p表示取指针p所指的字符,如果为0则表示字符串结束,退出循环 */

{

if(*p>='a'&&*p<='z') /*数组元素判断*/ /* 判断是否是a到z的字母,若是才统计*/

arr[*p-'a']++/*p与字母a的差值刚好就是数组arr下标*/ /* 字母a对应数组的下标是0, b是1,依次类推 */

p++ /* 指针加1, 指向后面一个字符 */

}

}

这样可以么?

#include<stdio.h>

#define SIZE 26

main()

{

    int c,i

    int capital[SIZE]={0}//用来存放26个大写字母字母出现的频数

    int lower[SIZE]={0}//用来存放26个小写字母字母出现的频数

    

   while((c=getchar())!=EOF){ //遇到文件结束符输出结果

       if (c>='A'&&c<='Z')

           ++capital[c-'A']

       else if (c>='a'&&c<='z')

           ++lower[c-'a']

   }

   printf("Capital=\n")

   for(i=0i<26i++)

       printf("%d",capital[i])

   printf("\n")   

   printf("Lower=\n")

   for(i=0i<26i++)

       printf("%d",lower[i])

   printf("\n")

   }