読者です 読者をやめる 読者になる 読者になる

文字列検索の演習問題

#include <stdio.h>

#define NUM 300

 

int main(){

//初期化

    char s[NUM];

    int i,j,count10;

    int countln=0;

//検索する文字列

    char search[]="child*n";

//ファイル読み込み

    FILE *fp;

    char *fname = "./hemingway2.txt";

    fp = fopen(fname, "r");

    if(fp == NULL){

        printf("Cannot open a file");

        return -1;

    }

    //各行を読み込む

    while(fgets(s, NUM, fp)!=NULL){

        i=0;j=0;countln++;

        //処理を行う

        while(s[i]!='\0'){

            if(s[i]==search[j]||search[j]=='?'){

                j++;

            }else if(search[j]=='*'){//0文字以上10文字以下の任意の文字列

                j++;count10=0;

                while(count10<=10){

                    if(s[i]==search[j]){

                        j++;break;

                    }else{

                        i++;count10++;

                    }

                }

            }else if(search[j]=='@'){//0文字以上の任意の文字列

                j++;

                while(s[i]!='\0'){

                    if(s[i]==search[j]){

                        j++;break;

                    }else{

                        i++;

                    }

                }

            }else{

                j=0;

            }

            if(search[j]=='\0'){

                printf("%d行目%d文字目に見つかりました。\n%s\n",countln,i,s);

            }

            i++;

        }

    }

    fclose(fp);

    printf("検索が終了しました。");

}