c語言:計算輸入字元個數

來源:互聯網
上載者:User

近日再看《c語言程式設計第二版》,做了一下上面的習題。

1.編寫程式,列印出輸入中單詞長度的長條圖。

先來說第一題,沒輸入一個一個單詞後,你就要出入一個空格,接著輸入一個單詞,在輸入一個空格,依此迴圈輸入。當一個句子輸入完了,就需要隔行另起一段。

例:

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()
{
char 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();
}

不擅長寫作,文章僅供參考,如有錯誤請指正。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.