- 締切済み
文字列のある行数を表示する
お世話になっています。 前回、文字列の検索の質問をしたものです。 このプログラムは文字列を入力して、ファイルから文字列を検索する。 そして、検索した文字列の総数と、存在する行数目を出すというものです。 現状の問題は、検索した文字列の総数は出るようになりました。 しかし、存在する行だけを出したいのに、全ての行数目を 出してしまいます。 どのようにすれば検索した文字列のある行数目だけを表示できるようになるのでしょうか。 以下、現在のソースの状態です。 #include <stdio.h> #include <fstream> #include <iostream> #include <stdlib.h> #include <string.h> #define FALSE 0 #define TRUE 1 using namespace std; int main( ) { FILE *fp;//ファイルポインタ char filename[256];//ファイル名 char key[128];//検索文字列 char key2[128];//見つけた文字列の保存 int iCnt[128];//見つけた文字 char c; int keylen;//検索文字列の長さ int i = 0;//検索文字列の位置 int search = FALSE;//検索中フラグ int count = 0;//検索文字列出現回数 int j = 0; //検索対象ファイル名と検索文字列をコンソール入力 cout << "ファイル名を入力してください⇒ "; cin >> filename ; cout << "検索文字列を入力してください⇒ "; cin >> key; keylen = strlen(key); if((fp = fopen(filename,"r")) == NULL) { cout << "ファイルオープンエラー\n" ; exit(1); } //ファイル読み込み while((c = fgetc(fp)) != EOF) { if(search) {//検索中 //検索文字列に一致しない文字が現れた if(c != key[i]) { search = FALSE; i = 0; } else{ i++; } } else{ //検索中ではない if(c == key[i]) { search = TRUE; i++; } } //検索文字列と全て一致した場合 if(keylen == i) { count++; i = 0; iCnt[i] = 1; search = FALSE; } } fclose(fp); cout << "出現回数は " << count << '\n'; //ファイル(filename)からの読み込み ifstream ifs(filename); string buf; while(getline(ifs, buf) && ifs ) { // ここで行目数の処理を行っています。 j++; if((count++ && search = FALSE) == TRUE) { cout << j << "行目" << endl; } } return 0; }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- JaritenCat
- ベストアンサー率37% (122/322)
- asuncion
- ベストアンサー率33% (2127/6290)
お礼
ご回答ありがとうございました。 何とか問題が解決しました。strstr関数を使うことで条件はクリアされました。