在指定文本中查询指定字符串

/*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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值