/*2014/2/28 10:13
*功能:主要用于文本文件中字符串的查找
*作者:CxDtreeg
*/
#include<iostream>
#include"fstream"
#include"string"
#include"windows.h"
#include"vector"
#include"map"
#include"set"
#include"time.h"
#include"algorithm"
#include"sstream"
#include"utility"
using namespace std;
class TextQuery
{
public:
bool Import(ifstream &file,string &filename);
void MyFind(string &);
private:
vector<string> text;
};
bool TextQuery::Import(ifstream &file,string &filename)
{
file.open(filename.c_str());
if(!file)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x4);
cout<<"没有这个文件!"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x7);
return false;
}
while(!file.eof())
{
string s;
getline(file,s);
text.push_back(s);
}
file.close();
return true;
}
void TextQuery::MyFind(string &QueryWord)
{
int total=0;
for(vector<string>::size_type i=0; i!=text.size(); ++i)
{
vector<string>::size_type wei=text[i].find(QueryWord);
if(wei!=string::npos)
{
++total;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x3);
cout<<"(lines "<<i+1<<") ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x7);
vector<string>::size_type tou=0;
while(wei!=string::npos)
{
cout<<text[i].substr(tou,wei-tou);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x6);
cout<<text[i].substr(wei,QueryWord.size());
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x7);
tou=wei+QueryWord.size();
wei=text[i].find(QueryWord,tou);
if(wei==string::npos)
cout<<text[i].substr(tou)<<endl;
}
}
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x3);
cout<<"查询到"<<total<<"条结果。 ";
}
void run(char *argv[],int argc)
{
string filename,QueryWord;
TextQuery TeW;
clock_t start,stop;
ifstream file;
if(argc==1)
{
cout<<"请输入文件名:"<<endl;
cin>>filename;
cout<<"请输入查找的词:"<<endl;
cin>>QueryWord;
}
else if(argc==3)
{
filename=argv[1];
QueryWord=argv[2];
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x4);
cout<<"格式错误!正确格式:查询程序 文件名 要查询的字符串"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x7);
return;
}
start=clock();
if(!TeW.Import(file,filename))
return ;
TeW.MyFind(QueryWord);
stop=clock();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x3);
cout<<"查询用时:"<<stop-start<<"ms"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x7);
}
int main(int argc,char *argv[])
{
run(argv,argc);
return 0;
}
*功能:主要用于文本文件中字符串的查找
*作者:CxDtreeg
*/
#include<iostream>
#include"fstream"
#include"string"
#include"windows.h"
#include"vector"
#include"map"
#include"set"
#include"time.h"
#include"algorithm"
#include"sstream"
#include"utility"
using namespace std;
class TextQuery
{
public:
bool Import(ifstream &file,string &filename);
void MyFind(string &);
private:
vector<string> text;
};
bool TextQuery::Import(ifstream &file,string &filename)
{
file.open(filename.c_str());
if(!file)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x4);
cout<<"没有这个文件!"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x7);
return false;
}
while(!file.eof())
{
string s;
getline(file,s);
text.push_back(s);
}
file.close();
return true;
}
void TextQuery::MyFind(string &QueryWord)
{
int total=0;
for(vector<string>::size_type i=0; i!=text.size(); ++i)
{
vector<string>::size_type wei=text[i].find(QueryWord);
if(wei!=string::npos)
{
++total;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x3);
cout<<"(lines "<<i+1<<") ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x7);
vector<string>::size_type tou=0;
while(wei!=string::npos)
{
cout<<text[i].substr(tou,wei-tou);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x6);
cout<<text[i].substr(wei,QueryWord.size());
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x7);
tou=wei+QueryWord.size();
wei=text[i].find(QueryWord,tou);
if(wei==string::npos)
cout<<text[i].substr(tou)<<endl;
}
}
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x3);
cout<<"查询到"<<total<<"条结果。 ";
}
void run(char *argv[],int argc)
{
string filename,QueryWord;
TextQuery TeW;
clock_t start,stop;
ifstream file;
if(argc==1)
{
cout<<"请输入文件名:"<<endl;
cin>>filename;
cout<<"请输入查找的词:"<<endl;
cin>>QueryWord;
}
else if(argc==3)
{
filename=argv[1];
QueryWord=argv[2];
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x4);
cout<<"格式错误!正确格式:查询程序 文件名 要查询的字符串"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x7);
return;
}
start=clock();
if(!TeW.Import(file,filename))
return ;
TeW.MyFind(QueryWord);
stop=clock();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|0x3);
cout<<"查询用时:"<<stop-start<<"ms"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x7);
}
int main(int argc,char *argv[])
{
run(argv,argc);
return 0;
}