C言語関係掲示板 過去ログ347

過去ログ

No.347.ファイルからの文字列検索

[戻る] [ホームページ]
No.2237

ファイルからの文字検索
投稿者---ひろお(2002/07/30 01:27:33)


C言語初心者のものです。
コマンドラインでファイルにある文字を検索して、その文字がどの何行目何文字目にあるか表示したいと思っています。このHPで過去に似たような質問があり多少は理解したつもりなのですが、例えば関数strstrを使わないでifとfor文程度で検索、文字比較のプログラムを作成したいと思ってますが、よくわかりません。strstrをきちんと理解していないからだと思いますが、よかったら教えていただけませんでしょうか?出来れば、コメント付でお願いします。
よろしくお願いします。

No.2239

Re:ファイルからの文字検索
投稿者---かずま(2002/07/30 02:44:23)


> コマンドラインでファイルにある文字を検索して、
> その文字がどの何行目何文字目にあるか表示したいと思っています。

本当に「文字」の検索ですか。

#include <stdio.h>

int main(int argc, char *argv[])
{
    int c, ch, line, col;

    if (argc != 2) {
        fprintf(stderr, "usage: %s chacter <file\n", argv[0]);
        return 1;
    }
    ch = argv[1][0];
    for (line = col = 1; (c = getchar()) != EOF; col++) {
        if (c == ch)
            printf("line = %d, col = %d\n", line, col);
        if (c == '\n') {
            line++; col = 0;
        }
    }
    return 0;
}

----------------------------------------------------------------------
strstr を意識するのなら、本当は「文字列」の検索ではありませんか。

int main(int argc, char *argv[])
{
    int  line, col, i;
    char buf[1024], *str;

    if (argc != 2) {
        fprintf(stderr, "usage: %s string <file\n", argv[0]);
        return 1;
    }
    str = argv[1];
    for (line = 1; fgets(buf, sizeof buf, stdin); line++) {
        for (col = 0; buf[col]; col++) {
            for (i = 0; str[i]; i++)
                if (buf[col+i] != str[i])
                   break;
            if (str[i] == '\0')
                printf("line = %d, col = %d\n", line, col+1);
        }
    }
    return 0;
}



コメントは自分で考えて付けてください。


No.2249

Re:ファイルからの文字検索
投稿者---ひろお(2002/07/31 00:49:44)


間違えてました。「文字列」の検索でした。
ありがとうございました。

コメントは自分で考えて、がんばりたいと思います。