1樓:
if(c==' ') word=0;//當前字元是空格,所以不是單詞,word=0
else if(word==0)//當前字元是字母(c!=' '),所以不是空格,並且前面的不是單詞(word==0)
//因為這種情況什麼也不做,所以**沒有寫,因此就有些不好理解了。
//else 否則,(當前字元是字母(c!=' '),並且word==1; 即還在同一個單詞中)
// donothing() ;什麼也不做!
////
ps:這個程式,可以處理n個空格,和前後都有空格的情況。
的確是個小巧精悍的程式!
舉例 str=「 it is a good idea! ";
i=0~3 c==' ';執行if(c==' ') word=0; 所以 一直有word=0 ;並且 word==0;
i=4 遇到 『i』 c=='i' ;word==0 執行else if (word==0);//word =1; num++;
word由0變1;一個單詞了,計數加一。
並且以後就在同一個單詞中了,始終有word==1 ,除非遇到空格。
i=5 遇到 『t』; c=='t' ;word==1 不執行 if 和 else if 的任何一個;滑過『t』
i=6 再次遇到空格,執行if(c==' ') word=0;遇到第一個空格,word==1變成word==0
i=7~9 以後重複i=0~4 一直有word=0的賦值 ;並且始終有 word==0;
i=10 重複 i=4 的過程 這次遇到 『i』 c=='i' ;word==0 執行else if (word==0);//word =1; num++;
word由0變1;一個單詞了,計數加一。
i=11 重複 i=5 遇到 『s』; c=='s' ;word==1 不執行 if 和 else if 的任何一個;滑過『s』
以後大致相同最後遇到\0'掃描結束。
記錄5個單詞
從空格變單詞5次;從單詞變空格5次;
有幾個空格word=0;就執行幾次。
有幾個單詞word =1; num++; 就執行幾次,並且,只有遇到,第一個字母時,才執行。
所有,非第一個字母的字母,和其他,非空格,並且非結束符的字元,被滑過。
word 和 num 都初始化為0 所以無論,第一個是空格會被賦值為0,還是字母(word 已經是0了)都沒有問題。
同樣,結尾有無空格,和空格有n個,一樣沒有問題。因為:
1)結尾的空格,不會遇到非空格,就結束迴圈了。
2)無論多少空格,都會有word=0的賦值操作,不遇到非空格,word就一直為0;
結論:這段**看了,確實給人以一種,驚豔的感覺!!!!!!!!!!!!
2樓:飛向天空
word在這裡沒有統計數量的功能,word只是告訴你什麼時候單詞數量應該加1,什麼時候單詞數量不變。那究竟是什麼時候單詞數量num該加 1 呢?
在str="a1 b2 c3 d4 e5" 裡面,除了第一個字串a1外,其餘的每個字串前面都有一個空格,如果我們把str換為str=" a1 b2 c3 d4 e5",用word=0表示遇見一個空格,那麼每遇見word=0時單詞數量都加 1 ,這樣就可以正確統計單詞數量了。
程式裡面word初始值就是0,那麼就可以把str理解成str=" a1 b2 c3 d4 e5",即在最開始新增一個空格,單詞數量是不變的。word等於0時num加1——表示後面有一個新單詞。num加1,然後word再改為1(只要不是0),直到遇到空格時word再改為0。
可是要是有連續的空格出現呢?其實這個也沒有問題,str="a b",a與b之間有兩個空格,讀第一個空格的時候word,被賦值為0,讀第二個空格的時候word同樣被賦值為0,等價於str="a b",即字串中間的空格再多都等同於一個空格。同樣,在str末尾出現空格等同於沒有空格,因為word一直被賦值為0,所有的 else if(word==1) 都不可能執行,num也不可能加 1 了。
開頭類似。
word既然只是一個表示「下面是否有新單詞出現」的訊號,那麼就可以把word的賦值改一下,比如把所有word=0改為word=100,或者把所有word=1改為word=25,注意是「所有」,包括初始化的賦值。隨便如何改變,都不影響統計結果。甚至可以不用word,比如申明一個char c=『a』,把所有word=0換為c=『a』,把所有word=1換為c=『b』(只要不是a,其餘任何字元都可以),最終結果一樣。
3樓:陀蔚榮忠
#include
#define
max_char
200int
read_line(char
str,int
n);int
count_spaces(const
char
s);void
f1(char
*s);
intmain()
//讀入字串
intread_line(char
str,int
n)//去除字串的前導空格。
void
f1(char*s)
4樓:佈雷德伊蘭
lz的**統計的不是單詞,應該是統計的字母。
如果str="this is word!" 怕是就統計的不是單詞了
5樓:幫個忙好不
word就是個標誌,空格時是0,然後不是空格時是1,是1時就表示是單詞,用num統計
輸入一行字元,分別統計出其中的英文字母,空格,數字和其它字元的個數
問明 include int main char c int letters 0,spaces 0,digits 0,others 0 printf 請輸入一串任意的字元 n while c getchar n if c a c z c a c z letters else if c 0 c 9 d...
c語言輸入一行字串,如何統計其中的字母和數字的個數
問明 要統計英文字母,空格,數字和其他字元的個數,如下 include include int main char c int letters 0 int space 0 int digit 0 int other 0 printf 請輸入一行字元 while c getchar n if c a ...
編寫程式,從鍵盤輸入一行字串,將其中的小寫字母全部轉換成大
實現該功能的吃語言具體 如下 include include include int main file fp int i 0 char str 100 printf 請輸入字串,並且以感嘆號 結束 n if fp fopen test.txt w null 開啟輸出檔案並使fp指向此檔案 prin...