C語言筆記
技術標籤:C++
1、cypher1.c(更改輸入,空格不變)
//更改輸入,空格不變 #include <stdio.h> #define SPACE ' '//SPACE表示單引號+空格+單引號 int main(void){ char ch; ch = getchar();//讀取一個字元 while (ch != '\n'){//當一行未結束時 //將getchar()讀取鍵盤輸入的值賦給ch,然後再判斷ch !='\n',不是換行符,則為真 if(ch == SPACE){//留下空格 putchar(ch);//該字元不變 }else{ putchar(ch + 1);//改變其它字元 } ch = getchar();//獲取下一個字元 } putchar(ch); //putchar函式(字元輸出函式)的作用是向控制檯輸出字元 return 0; }
執行結果:
分析:由getchar()函式在控制檯接收一個字元並賦值給ch。當在控制檯輸入的不是回車鍵則為真,真的話就繼續在控制檯上輸入。輸入的如果是回車鍵則為假,假的話就跳出while迴圈體,不能再在控制檯上繼續輸出字元。再結束while迴圈之前先行判斷if語句,如果輸入的是空格則不變,否則字元根據ASCII對應的字元進行+1,然後獲取下一個字元。最後通過putchar()函式將字元顯示在控制檯上。
2、wordcnt.c(統計字元數、單詞書、行數)
//統計字元數、單詞書、行數 #include <stdio.h> #include <ctype.h>//為isspace()函式提供原型 #include <stdbool.h>//為bool、true、false提供定義 #define STOP '|' int main(void){ char c; char prev;//前一個字元 long n_chars = 0L;//字元數 int n_lines = 0;//行數 int n_words = 0;//單詞數 int p_lines = 0;//不完整的行數 bool inword = false;//如果c在單詞中,inword等於true printf("輸入要分析的文字 (分號終止 |):\n"); prev = '\n';//回車鍵賦值給字元prev while ((c = getchar()) != STOP){ //getchar()函式:在控制檯接收字元賦值給c,若字元不是|就為真,如果是就為假 n_chars++;//統計字元數 if(c == '\n'){ //如果c字元==回車鍵,則開始統計行 n_lines++;//統計行 } if(!isspace(c) && !inword){//isspace,用於檢查引數c是否為空格字元 //如果c字元不為空並且為真,意思就是字元c不是空格的時候則為真 //當inword開始為真的時候,便統計單詞 inword = true;//開始一個新的單詞 n_words++;//統計單詞 } //如果字元c為空並且inword為假的時候就為真 if(isspace(c) && inword){ inword = false;//達到單詞的末尾 prev = c;//儲存字元的值 } } //當字元prev不等於回車鍵的時候,便為一行 if(prev != '\n'){ p_lines = 1; } printf("字元數 = %ld, 單詞數 = %d, 行數 = %d,", n_chars, n_words, n_lines); printf("不完整的行數 = %d\n", p_lines); return 0; }
執行結果:
分析:1、首先進入while迴圈條件:getchar()函式:在控制檯接收字元賦值給c,如果在控制檯上輸入“|”則跳出while迴圈,進入迴圈開始統計字元數。
2、接著進入if判斷語句條件是如果字元c等於回車鍵的時候,則開始統計行。
3、下一條if語句條件是字元c不是空格的時候則為真,當inword為true,開始統計單詞數。
4、進入下一條if判斷語句條件是如果字元c為空並且inword為假的時候就為真,
這句有點繞說簡單點就是當字元為空的時候,將字元c儲存在前一個字元上。
你可以想象成當輸入完最後一個字元的時候,控制檯上字元前面的游標為空,為空的時候將字元c賦值給前一個prev。
5、最後一條if判斷語句注意是在while迴圈體外,當字元prev不等於回車鍵的時候,便為一行,翻譯過來就是回車鍵不能算作是一行。
上面五條語句都已經逐個分析完畢,程式碼有點繁瑣。最後再總結一下大體思路:首先在控制接收字元輸入,當輸出“|”就會跳出迴圈體。然後開始統計在控制檯上輸入的字元數,(1)如果控制檯在接收字元的時候收到“回車鍵”,則算一行。(2)在字元c不是空格的時候,便開始統計單詞數.(3)當字元為空的時候,儲存最後一個字元。該段文字用括號括起來均表示在while迴圈體中的if判斷語句,怕看的時候分不清特地用括號括起來,以免混淆。最後一條if判斷語句因為不是在迴圈體內,所以就沒括起來!