C言語関係掲示板

過去ログ

No.465.文章中から入力した文字列を探すプログラム

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

文章中から入力した文字列を探すプログラムについて
投稿者---伊藤(2002/11/07 18:04:17)


あらかじめ作成されたファイルを読み込み、入力した文字列(ifなど)をファイル内で探し、見つかった場合は行番号と入力した文字列が含まれる行の内容を表示し、無い場合は見つからないと表示するプログラムを教えてください。

No.3361

Re:文章中から入力した文字列を探すプログラムについて
投稿者---aki(2002/11/07 19:08:07)


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

#define LINE_MAX 1024

void find(FILE *fp, const char *target)
{
    char line[LINE_MAX];
    int lineno = 0, found = 0;

    while (fgets(line, sizeof line, fp) != NULL) {
        lineno++;
        if (strstr(line, target) != NULL) {
            printf("%.4d: %s", lineno, line);
            found |= 1;
        }
    }
    if (!found)
        printf("見つかりませんでした\n");
    rewind(fp);
}

int prompt(char *buf)
{
    printf("検索文字列を入力してください: ");
    return scanf("%s", buf) == 1;
}

#define TARGET_MAX 80

int main(int argc, char *argv[])
{
    FILE *fp;
    char target[TARGET_MAX];

    if (argc < 2) {
        fprintf(stderr, "引数でファイル名を指定してください\n");
        return 1;
    }

    if ((fp = fopen(argv[1], "r")) == NULL) {
        fprintf(stderr, "%sがオープンできませんでした\n", argv[1]);
        return 1;
    }

    while (prompt(target))
        find(fp, target);
    return 0;
}


No.3365

Re:文章中から入力した文字列を探すプログラムについて
投稿者---kamadoma(2002/11/07 22:19:00)


>あらかじめ作成されたファイルを読み込み、入力した文字列(ifなど)をファイル内で探し、見つかった場合は行番号と入力した文字列が含まれる行の内容を表示し、無い場合は見つからないと表示するプログラムを教えてください。

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

#define NOTFOUND 0
#define FOUND    1

FILE *fileOpen(char *p_filename,char *p_mode);

int main(int argc,char *argv[])
{
	FILE *in_fp;
	char line[256];
	int lineNo = 0; /*行番号初期化*/
	int matchFlag = NOTFOUND;

	/*実行時引数の数チェック*/
	if(argc != 3){
		fprintf(stderr,"使用法:検索対象ファイル名 検索語\n");
		exit(1);
	}

	/*ファイルオープン処理*/
	in_fp = fileOpen(argv[1],"r");

	/*ファイル読み込み処理*/
	while(fgets(line,256,in_fp) != NULL){
		/*行番号カウントアップ*/
		lineNo++;
		/*検索語が見つからないときは、次の行を読みに行く*/
		if(strstr(line,argv[2]) == NULL){
			matchFlag = NOTFOUND;
			continue;
		}
		/*見つかったときは、行番号とその内容を表示する*/
		else{
			printf("行番号:%d行目\t%s",lineNo,line);
			matchFlag = FOUND;
		}
	}

	if(matchFlag == NOTFOUND){
		printf("ファイル[%s]には検索語[%s]は見つかりませんでした。\n",argv[1],argv[2]);
	}
	
	/*ファイルクローズ処理*/
	fclose(in_fp);
	getchar();

	return 0;
}

FILE *fileOpen(char *p_filename,char *p_mode)
{
	FILE *fp;

	fp = fopen(p_filename,p_mode);
	if(fp == NULL){
		fprintf(stderr,"ファイル[%s]を開けません。\n",p_filename);
		exit(1);
	}

	return fp;
}




	



No.3373

Re:文章中から入力した文字列を探すプログラムについて
投稿者---shelly(2002/11/08 05:23:11)


>if(strstr(line,argv[2]) == NULL){
>	matchFlag = NOTFOUND;
>	continue;
>}

この
matchFlag = NOTFOUND;
は不要です。
最後の行に検索文字列が含まれていない場合、見つかりませんの
メッセージが出てしまいます。


No.3374

Re:文章中から入力した文字列を探すプログラムについて
投稿者---kamadoma(2002/11/08 09:22:15)


><pre>>if(strstr(line,argv[2]) == NULL){
> matchFlag = NOTFOUND;
> continue;
>}

この
matchFlag = NOTFOUND;
は不要です。
最後の行に検索文字列が含まれていない場合、見つかりませんの
メッセージが出てしまいます。</pre>

おっしゃるとおりです。
投稿したあとに気付きました。