演習7-7 K&R プログラミング言語C

演習7-7

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLINE 1024

int my_getline(char*, int);

/* find : 最初の引数にあるパターンとマッチする行を表示する */
int main(int argc, char *argv[])
{
    char line[MAXLINE];
    char *prog = argv[0];
    FILE *fp;
    int found = 0;

    if (argc < 2) {
        printf("Usage : %s PATTERN [FILE]\n", prog);
        exit(EXIT_FAILURE);
    } else if (argc == 2) {
        while (my_getline(line, MAXLINE) > 0) {
            if (strstr(line, argv[1]) != NULL) {
                printf("%s", line);
                found++;
            }
        }
    } else if (argc == 3) {
        if ((fp = fopen(argv[2], "r")) == NULL) {
            fprintf(stderr, "%s: can't open %s\n", prog, argv[2]);
            exit(EXIT_FAILURE);
        }
        while (fgets(line, MAXLINE, fp) != NULL) {
            if (strstr(line, argv[1]) != NULL) {
                printf("%s", line);
                found++;
            }
        }
        fclose(fp);
    }

    return found;
}

/* my_getline : 1行読んで、長さを返す */
int my_getline(char *line, int max)
{
    if (fgets(line, max, stdin) == NULL) {
        return 0;
    } else {
        return strlen(line);
    }
}

実行結果

$ ./ex7-7 include ex7-7.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»