当前位置:编程学习 > C/C++ >>

c语言:计算输入字符个数及字母出现的频率思路

 

近日再看《c语言程序设计第二版》,做了一下上面的习题。

1.编写程序,打印出输入中单词长度的直方图。

2.编写程序,打印出输入中各个字符出现频率的直方图。

先来说第一题,没输入一个一个单词后,你就要出入一个空格,接着输入一个单词,在输入一个空格,依此循环输入。当一个句子输入完了,就需要隔行另起一段。

例:

i am a studen

第1个单词长度为1

第2个单词长度为2

第3个单词长度为1

第4个单词长度为6

但是,当每输入完一个单词的时候需要用空格隔开,然后在输入,编写的过程,要判断,详情看代码。

通过维基百科查询,目前最长单词的长度为30,有个很长的大概是225多个字母,不过我向我们一般也用不着它。

将最长字母长度MAXWORD设置为30,如果你喜欢你可以设置成任意长度

建立单词长度数组word length,简称为wl[].

数组最大为wl[MAXWORLD]

将单词长度数组中的值全部值为0

int i;

 

for(i = 1; i <= MAXWORD; i++)

 

  wl[i] = 0;

 

为什么要这样做?

我遇到这个题目的时候是这么想的,每输入一个单词,将其长度放入数组中保存着。

于是,我就写呀写呀,写了好长时间。

后来我就没写了,翻了下原来的笔记,看看了,原来可以这么想,一下子事情变得简单多了。

我将长度为1~30的字母,分别归类长度为1的、长度为2、长度为3等等,然后将其放入数组,让它们保存着。

例:

internet 这个单词长度为8,我就将其放入数组wl[8],

如果还有相同长度放入wl[8]中,wl[8]的值就得+1啦。

所以该写成++wl[8]。

现在思路明白了,我们可以这么写了。

#include <stdio.h>

 

#define MAXWORD 30   //单词的最大长度

#define IN 1    //在单词内,即没有遇到空格

#define OUT 0   //在单词外,即遇到了空格

 

/*word length ==> wl单词长度简称*/

 

int wl()

{

    int c;

    int i;

    int nc;

    int state;    //state为单词的状态:IN或OUT;

    int overflow;   //操过MAXWORD的单词个数

    int wl[MAXWORD];  //长度为1~30的的字符长度统计

 

    state = OUT;

    nc = 0;

    overflow = 0;

 

    for(i = 1; i < MAXWORD; ++i)

        wl[i] = 0;

 

    while((c = getchar()) != EOF)

        if(c == ' ' || c == '\n' || c == '\t')

        {

            state = OUT;

 

            if(nc > 0)

                if(nc < MAXWORD)

                    ++wl[nc];

                else

                    ++overflow;

            nc = 0;

        }

        else if(state == OUT)

        {

            state = IN;

            nc = 1;

        }

        else

            ++nc;

 

 

        for(i = 1; i < MAXWORD; ++i)

            printf("长度为:%d的单词个数为:%d : \n\n", i, wl[i]);

 

            return 0;

}

main()

{

    wl();

}

不擅长写作,文章仅供参考,如有错误请指正。

Have a nice day!!!

摘自 Aric小屋

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,