首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

K&R 經典練習:C 語言模式匹配行列印器實作

     編輯:關於C

題目來源

《The C Programming Language (2nd Ed.)》第 4 章練習:編寫程式讀取標準輸入,列印所有包含指定模式的行。

核心邏輯

  1. 檢查命令列參數 argc == 2,模式字串在 argv[1]。
  2. 迴圈呼叫 getline() 讀取每一行。
  3. 使用 strstr() 判斷模式是否出現於行中。
  4. 符合則列印該行,計數器累加。

完整程式碼

#include 
#include 

#define MAXLINE 1000

int getline(char *line, int max);

int main(int argc, char *argv[]) {
    char line[MAXLINE];
    int found = 0;

    if (argc != 2) {
        fprintf(stderr, "Usage: %s pattern\n", argv[0]);
        return 1;
    }

    while (getline(line, MAXLINE) > 0) {
        if (strstr(line, argv[1]) != NULL) {
            printf("%s", line);
            found++;
        }
    }
    return found;
}

int getline(char *s, int lim) {
    int c, i;
    for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; i++)
        s[i] = c;
    if (c == '\n') s[i++] = c;
    s[i] = '\0';
    return i;
}

關鍵函數解析

函數功能回傳值
getline從 stdin 讀取一行至緩衝區讀取字元數,EOF 為 0
strstr尋找子字串首次出現位置指標或 NULL

編譯與測試

$ gcc find.c -o find
$ echo -e "hello world\npattern match\nno match" | ./find pattern
pattern match

擴充建議

  • 支援多模式(argv[1..n])。
  • 加入 -n 顯示行號、-i 忽略大小寫。
  • 使用 regex.h 支援正則表達式。
  • 大檔案改用 mmap 或逐塊讀取避免記憶體壓力。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved