#include<iostream>
#include<fstream>
#include<vector>
#include<string.h>
using namespace std;
bool contins(string str, string word){//判断欲比较的单词和line里的每个单词是否相同
if(str == word) return true;
else return false;
}
bool isWord(char ch){//判断line单个字符是否是字母
bool flag = false;
if(ch >= 97 && ch <= 122 )
flag = true;
if(ch >= 65 && ch <= 90)
flag = true;
return flag;
}
int recordWord(string line, string word){
int i = 0, j = 0, count = 0;
string str = "";
while(i < line.length()){
if(isWord(line[i])){
str += line[i];
} else {
if(contins(str, word))
count++;
str = "";
}
i++;
}
if(contins(str, word))//检测行末单词
count++;
return count;
}
void printLines(int arrayIndex[100][100], int i, const int MAX_LINES){
for(int j = 0; j < MAX_LINES; j++){
if(arrayIndex[i][j] != 0){
cout << arrayIndex[i][j] << " ";
} else {
break;
}
}
}
int main(){
vector<string> search;
const int MAX_LINES = 100;
int count = 0;
while(true){
cout << "请输入查找内容,#结束:" << endl;
string str;
cin >> str;
if(str == "#"){
break;
} else {
search.push_back(str);
}
++count;
}
int arrayNum[count];//记录单词出现次数
int arrayIndex[count][MAX_LINES];//记录单词出现的行号
for(int i = 0; i < count; i++){//初始化记录行号数组
for(int j = 0; j < MAX_LINES; j++){
arrayIndex[i][j] = 0;
}
}
memset(arrayNum, 0, sizeof(arrayNum));
for(int i = 0; i < count; i++){
ifstream fin("test.txt");
string line = "";
int lines = 0, j = 0;
while(getline(fin, line)){
lines++;
int recordWay = recordWord(line, search[i]);
if(recordWay){//单词在本行是否出现
arrayNum[i] += recordWay;//保留每行出现的次数
arrayIndex[i][j++] = lines;//记录出现在第几行
}
}
}
for(int i = 0, j = 0; i < count; i++){
cout << "查询结果:";
cout << "“" << search[i] << "”"<< "出现次数:" << arrayNum[i] << endl;
cout << "查询结果:分别出现在 ";
printLines(arrayIndex, i, MAX_LINES);
cout << "行" << endl;
}
return 0;
}