C primer plus 第六版 第八章 第四題 程式設計練習答案
/*
本程式應題目而建立。
題目要求: 遇到EOF之前,將輸入作為字元流讀取。
該程式要求報告平均每個單詞的字母數。
*/
/* 邏輯 - 程式碼構建
本題實現要求的核心結構就是使用標頭檔案 ctype 的 isalpha 判斷是否為字母。
首先建立一個變數 int ch 獲取輸入。
再建立一個變數 int last 儲存上一次輸入。 為了程式完美,需要細緻的判斷。具體看 while 迴圈體 if 的實現。
再去建立 while 迴圈獲取輸入,判斷則放入迴圈體。
while(expression)expression 依舊是 (ch = getchar() ) != EOF
if 判斷是否為 isalpha 字母。
是字母則跳過把。
之所以先判斷是否為字母,是為了last 變數儲存上一個字元。。。具體看 while 迴圈體的實現。
else if 再判斷是否為 ispounct 標點符號,
然後內嵌一個if判斷上一個是否為字母。
如果是則 用一個變數計數字母數量加1 。 正常標點符號前都是一個單詞。。
else if 再判斷是否為 isspace 空白字元(空格,製表符,換行符等)
是則判斷 last 是否為 ispounct。
如果是則表示上一個字母用標點符號結尾,則不計數單詞。
如果不是,就計數單詞。。。
else if 再判斷是否為 isalpha 字母。
是字母則跳過把。
else 就錯誤報告吧,除了 空白,字母,標點符號我還真想不出來還有什麼字元了。。
*/
本來這東西我是放到程式碼裡面的,不過這麼長,而且程式碼裡的註釋是黑色的不好分辨,閱讀艱辛困苦,故而取出單獨放一邊。
/*
本程式應題目而建立。
題目要求: 遇到EOF之前,將輸入作為字元流讀取。
該程式要求報告平均每個單詞的字母數。
*/
#include<stdio.h>
#include<ctype.h>
int main(void)
{
// 本文讀者會看到last的更新會放入if中。
// 這是因為if判斷時ch已經讀取,結束判斷後則會迭代。所以把last放入if中可以達成儲存上一個字元的效果。
int ch = 0; // Save input.
int last = 0; // Save last input.
int words = 0; // Save words amount.
int letters = 0; // Save character amount.
printf("Please input:");
while( (ch = getchar() ) != EOF )
{
if(isalpha(ch))
{
last = ch;
letters++;
continue;
}
else if(ispunct(ch))
{
if(isalpha(last))
{
// 如果上一個是字母,則計數單詞。
last = ch;
words++;
printf("This is a words. %c \n", ch);
}
else
{
last = ch;
}
}
else if(isspace(ch))
{
if(ispunct(last))
{
// 如果上一個是標點符號,則不計數單詞數。
last = ch;
}
else if(isalpha(last))
{
// 如果上一個不是標點符號,則代表一個單詞結束,計數單詞數。
last = ch;
words++;
printf("This is a words. %c \n", ch);
}
}
else
{
printf("\n\nWarning !!! Switch has some problem. Please fix it !!\n\n");
}
}
printf("\n\n There have %d words .\n", words);
printf("And each words has an average of %d letters. \n", letters/words);
printf("Bye ~\n");
getchar();
return 0;
}
相關文章
- C primer plus 第六版 第八章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第八章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第八章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第八章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第九章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第九題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第一題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第二題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第三題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十一題題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十三題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十四題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十五題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第九題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第十題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第二題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第一題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第三題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十二題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第二題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第三題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第九題 程式設計練習答案程式設計