13.基本アルゴリズム

13-1. 文字列の検索
13-2. 文字列の置換
13-3. リスト構造
13-4. セレクションソート
13-5. クイックソート

13-1. 文字列の検索

◇文字列検索(テキスト検索)

 まず、テキストファイルと検索文字列を指定し、標準出力にマッチした行を抽出して表示するプログラムを作成します。

 前回のテストプログラムにファイル入出力機能を付け加えたぐらいの単純なのものです。
 さらに、コマンド引数で指定する様に変更すれば、UNIXとかのgrepコマンドと同じようなものができあがります。

◇サンプルプログラム

#include<stdio.h>
#include<string.h>
int match_str(const char *a, const char *b);

void main()
{
FILE *fp;
int chk;
char a[100],fname[256],sstr[100];
printf("検索されるファイル名 : ");
scanf("%s",fname);
printf("検索文字列 : ");
scanf("%s",sstr);

if( (fp=fopen(fname,"r"))==NULL){
printf("ファイル %s が見つかりません\n",fname);return;
}
while(fgets(a,100,fp)!=NULL){
chk = match_str(a, sstr);
if (chk==1){
printf("%s",a);
}
}
}

int match_str(const char *a, const char *b)
{
    int i=0, j=0, max_a, max_b;
    while(1){
        if(a[i]=='\0'){max_a = i; break;}
        i++;
    }
    i=0;
    while(1){
        if(b[i]=='\0'){max_b = i; break;}
        i++;
    }
    for(i=0;i<max_a;i++){
        if(0==strncmp(&a[i],&b[j],1)){
            if(j==max_b-1){return 1;}
            else{j++;}
        }
    }
    return 0;
}

 尚、このプログラムは漢字等の検索もできましたが、2バイト文字に関する特殊な処理等は一切しておりませんので2バイト文字を使用したテキストファイルに検索をかけた場合、違うものまで検出される場合があります。