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. 参加编程竞赛:参加编程竞赛可以帮助你提高编码能力,并且可以让你与其他编程爱好者交流学习。
希望这些建议对你有所帮助!