#include #include #include #define MEMORY 2048 int main(int argc, char *argv[]){ int i; /* 何番目(ループ変数) */ int line; /* 何行目 */ int find; /* 一件でも見つかった時1になる */ int loop; /* 複数の語句で検索する場合のループ */ int flg; /* 一行に語句が見つかった場合1が立つ */ int count; /* 見つかった件数(一行につき一件) */ int check; /* 検索語句に同じものがあるか調べるループ変数 */ int break_flg; /* 検索語句が被ったら被った語句の検索中止フラグ */ char szbuf[MEMORY]; /* ファイルの一行をダンプ */ char s[MEMORY]; /* ファイルの何列目から検索語句単語文字数分ダンプ */ FILE *f; /* ファイルポインタ */ /* 初期化 */ i = 0; line = 0; find = 0; loop = 0; flg = 0; count = 0; check = 0; break_flg = 0; memset(szbuf, NULL, MEMORY); memset(s, NULL, MEMORY); f = NULL; if(argc == 1){ printf("使い方:実行ファイル 読み込むファイル 検索したい文字 検索したい文字 ...\n"); return -1; } f = fopen(argv[1],"r"); if(f == NULL){ printf("%s:そんなファイルありません\n",argv[1]); return -2; } if(argc == 2){ printf("検索する語句を入力して下さい。\n"); fclose(f); return -3; } /* ファイルが終わるまで */ while(fgets(szbuf, MEMORY, f) != NULL){ line++; flg = 0; /* 検索語句が終わるまで */ for(loop = 0; loop < argc-2; loop++){ /* 一行見終わるまで */ for(i = 0; szbuf[i] != '\0'; i++){ break_flg = 0; /* 検索語句が被ってるか調べる */ for(check = 0; check < loop; check++){ /* 検索語句が被ってたら中断フラグをたてる */ if(strcmp(argv[2+loop], argv[2+check]) == 0){ break_flg = 1; } } /* 中断フラグが立ったら(検索語句が被ったら)その語句の検索中断 */ if(break_flg == 1){ break; } memset(s, NULL, MEMORY); strncpy(s, szbuf+i, strlen(argv[2+loop]) ); /* 検索語句と一致したら */ if(strcmp(s, argv[2+loop]) == 0){ printf("%s:%d行目:%d列目:%s:発見しました\n",argv[1], line, i+1, argv[2+loop]); /* 語句が見つかったら一行につき一件増やす */ if(flg == 0){ count++; flg = 1; } /* 見つかったというフラグを立てる */ if(find != 1){ find = 1; } } } } } /* 見つからなかった場合 */ if(find != 1){ /* 検索単語をすべて表示する */ for(loop = 0; loop < argc-2; loop++){ printf("%s:",argv[2+loop]); } printf("見つかりませんでした。\n"); fclose(f); return -4; } else{ printf("%d件見つかりました。\n",count); } fclose(f); return 0; }