该程序将读取用户指定的任意文本文件,然后允许用户从该文件中查找单词。查询的结果是该单词出现的次数,并列出每次出现所在的行,如果某单词在同一行中多次出现,程序将只显示该行一次。行号按升序显示。
a. 它必须允许用户指明要处理的文件名字。
b. 程序将存储该文件的内容,以便输出每个单词所在的原始行。
vector<string> lines;//O(1)  完美hash
或 map<int, string> lines;//O(logN)
或 unorderedmap<int,string> lines;//O(1)
c. 它必须将每一行分解为各个单词,并记录每个单词所在的所有行。 在输出行号时,应保证以升序输出,并且不重复。 map<string, set<int> > word2Line; map<string, int> dict;
d. 对特定单词的查询将返回出现该单词的所有行的行号。

e. 输出某单词所在的行文本时,程序必须能根据给定的行号从输入 文件中获取相应的行。

/// @file textQuery.cc /// @author guoleida(496919313@qq.com) /// @date 2017-08-02 17:30:56 #include <vector> #include <string> #include <iostream> #include <map> #include <set> #include <sstream> #include <fstream> using std::cout; using std::endl; using std::cin; using std::string; using std::ifstream; using std::vector; using std::map; using std::set; using std::istringstream; class TextQuery public: void readFile(const string &filename); void query(const string & word); private: vector<string> _lines; map<string,set<int> > _word2Line; map<string,int> _wordFreq; void TextQuery::readFile(const string &filename) ifstream ifs(filename.c_str()); if(!ifs.good()) cout <<"ifstream open file error" <<endl; return; string line; int i=0; string word; while(getline(ifs,line))//一次读取一行 _lines.push_back(line);//将一行放入容器中 istringstream iss(line);//获取一行 i++;//行号加一 while(iss >> word)//每次拿到一个单词 _wordFreq[word]++;//频次加一 _word2Line[word].insert(i);//加入词出现的行号 void TextQuery::query(const string & word) cout<< word <<"共出现了" << _wordFreq.find(word)->second << "次" <<endl; set<int>::const_iterator itset; vector<string>::const_iterator itvector; int i;//用来匹配行号 for( itset = (_word2Line.find(word)->second).begin(); itset != (_word2Line.find(word)->second).end(); ++itset) cout<<" (line "<<*itset <<") "; for(itvector = _lines.begin();itvector != _lines.end(); ++itvector) if(*itset == ++i) cout << *itvector <<endl; cout <<endl <<endl; int main(int argc,char *argv[]) if(argc!=2) cout <<"请输入文件名"<<endl; return 0; TextQuery tq; tq.readFile(argv[1]); while(true) cout<<"请输入你要查询的单词($结束):"; string s; cin>>s; if(s=="$") break; tq.query(s); return 0; 运行结果如下: 文本查询该程序将读取用户指定的任意文本文件,然后允许用户从该文件中查找单词。查询的结果是该单词出现的次数,并列出每次出现所在的行,如果某单词在同一行中多次出现,程序将只显示该行一次。行号按升序显示。    要求:    a. 它必须允许用户指明要处理的文件名字。         b. 程序将存储该文件的内容,以便输出每个单词所在的原始行。         vecto 编写一个 文本 文件 单词 统计的程序,包括建立文件、 单词 统计、 单词 查询 单词 定位的功能。 1.2 【基本要求】 程序应先询问用户的ID号(ID 号包括两个大写 字母 和4 位数字),例如: 请输入用户ID号:AB1234 程序应对输入的ID 号验证,符合ID 号要求的格式,然后程序提示四种选择: (1) 建立文件 (2) 单词 统计 (3) 单词 查询 及定位 (4) 退出 i) 文件至少包含50个英文 单词 (一定 出现 重复的 单词 ,且一定包含数字) ii) 文档不规范, 单词 之间. Description 全国英语四级考试就这样如期到来了,可是小Y依然没有做好充分准备。为了能大学毕业,可怜的小Y准备作弊。 小Y费尽心机,在考试的时候夹带了一本字典进考场。现在的问题是:考试的时候可能有很多 单词 要查,小Y能不能来得及呢? Input 第一行一个整数N,表示字典 一共有多少个 单词 。 接下来每两行表示一个 单词 ,其 :第一行是一个...
【题目描述】 给出一个二维字符数组和一个 单词 ,判断 单词 是否 在数组 出现 单词 由相邻单元格的 字母 连接而成,相邻单元指的是上下左右相邻。同一单元格的 字母 不能多次使用。 给出的字符数组= [ [“XYZE”], [“SFZS”], [“XDEE”] ] 单词 =“XYZZED”, -> 返回 true, 单词 =“SEE”, ->返回 true, 单词 =“XYZY”, -> 返回 false. 【思路分析】 这种题一看就是要用DFS加递归来进行实现的。使用DFS,主要就是
//在给定字符串 找出 单词 (“ 单词 ”由大写 字母 和小写 字母 字符构成,其他非 字母 字符视为 单词 的间隔, //如空格、问号、数字等等,另外单个 字母 不算 单词 )。 //找到 单词 后,按照长度进行降序排序,(排序时如果长度相同,则按 出现 的顺序进行排列),然后输出到一个新的字符串 。 //如果某个 单词 重复 出现 多次,则只输出一次;如果整个输入的字符串 没有找到 单词 ,请输出空串。 //输出的 单词 之间使用一个“空格”隔开...
很高兴能帮到你。如果你想提高 C/ C++ 编程能力,这里有一些建议: 1. 多做题:可以去网上搜索一些 C/ C++ 的练习题,自己动手实现代码。这可以帮助你熟悉语言的语法和常用的库函数。 2. 阅读代码:可以去网上找一些开源的 C/ C++ 项目,看看别人是如何实现的。这样可以帮助你学习优秀的编码风格和解决问题的方法。 3. 加强基础知识:C/ C++ 编程需要扎实的计算机基础知识。如果你对计算机基础知识不是很熟悉,可以通过看书或者在线学习来提高。 4. 加强数据结构和算法知识:数据结构和算法是 C/ C++ 编程的重要组成部分。如果你想提高编程能力,可以通过学习数据结构和算法来提升自己。 5. 参加编程竞赛:参加编程竞赛可以帮助你提高编码能力,并且可以让你与其他编程爱好者交流学习。 希望这些建议对你有所帮助!