| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 402 人关注过本帖
标题:文本查询程序,焦头烂额。
只看楼主 加入收藏
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
结帖率:94.87%
收藏
已结贴  问题点数:10 回复次数:1 
文本查询程序,焦头烂额。
类文件名:TextQuer.hpp
  
程序代码:
#include<iostream>
#include<set>
#include<map>
#include<fstream>
#include<string>

class TextQuery{
    

public:
typedef std::vector<std::string>::size_type line_to;

void read_file(std::ifstream &is){
    store_file(is);
    build_map();
}
std::set<line_to>run_query(const std::string&)const;
std::string  text_line(line_no)const;

private:
void store_file(std::ifstream&);
void build_map();
std::vector<std::string>lines_of_text;
std::map<std::string,std::set<line_no> >word_map;}


类外定义成员函数:
TextQuer.cpp

程序代码:
#include<iostream>
#include<set>
#include<map>
#include<fstream>
#include<string>
#include"TextQuery.hpp"
using namespace std;

 void TextQuery::store_file(ifstream &is)

 {
     string s;
     while(getline(is,s))
     lines_of_text.push_back(s);
      }
      

 

 void TextQuery::build_map(){
     for(line_no ix=0;ix!=lines_of_text.size();++ix){
         
         isringstream line(lines_of_text[ix]);
         string word;
         while(line>>word)
word_map[word].insert(ix)     ;
     }

 }

 

 std::set<line_to>TextQuery::run_query(const std::string&)const{
     map<string,set<line_no> >::const_iterator loc=word_map.find(query_word);
     if(loc==word_map.end())
     return set<line_no>();
     else 
     return loc->second;

 }

 

 

 string TextQuery::text_line(line_no line)const{
     if(line<lines_of_text.size())
     return lines_of_text[line];
     throw std::out_of_range("line number out of range");
     

 }

 



主程序: main.cpp
程序代码:
#include<iostream>
#include"TextQuery.hpp"
#include<set>
#include<map>
#include<fstream>
#include<string>

using namespace std;
void     print_results(const set<TextQuery::line_no>)&locs,const string&sought,const TextQuery &file)
{
    typedef set<TextQuery::line_no>line_nums;
    line_nums::size_type size=locs.size();
    cout<<"\n"<<sought<<"occurs"<<size<<" "<<make_plural(size,"time","s"<<endl;
    line_nums::const_iterator it=locs.begin();
    for(;it!=locs.end();++it){
        cout<<"\t(line"<<(*it)+1<<" "<<file.text_line(*it)<<endl;
    }
}

    int main(){
    ifstream infile;
    if(argc<2||!open_file(infile,argv[1])){
        cerr<<"NO input file"<<endl;
        return EXIT_FAILURE;
    }
    
    TextQuery tq;
    tq.read_file(infile);
    while(true){
        cout<<"Enter word to loof for,orq to quit:";
        string xx;
        cin>>xx;
        if(!cin||xx='q')
        break;
        set<TextQuery::line_no>locs=tq.run_query(xx);
        print_results(locs,xx,tq);
        
    }
return 0;
}





为什么运行不了TT 。。小错误我自己会检查,请前辈解答大错误。
搜索更多相关主题的帖子: 查询 
2013-04-10 22:10
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:10 
编译器说什么?
什么叫运行不了?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-11 06:49
快速回复:文本查询程序,焦头烂额。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014248 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved