1. 程式人生 > 其它 >C語言筆記

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判斷語句因為不是在迴圈體內,所以就沒括起來!