C++文本内查重并且输出该怎么办,贵求大佬们指点

小弟初来乍到,研究了好几天也没什么办法,想实现的功能如下:
1,有一个TXT文档,里边是很多很多词,我想调用这个文档。
文档内容:、
苹果
香蕉

西瓜
火龙果
芒果
西红柿
黄瓜
2,自己输入一段文字,可以排查出有没有:例如 ,我有一个西瓜,包含了就是有,直接返回这段话 我有一个西瓜,或者输入我没有气球,不包含 就不再显示了,这样不知道行不行,
自己百度了几个代码,都不咋好使呢
#include <iostream>
#include <string>
#include <fstream>
#include <cassert>
using namespace std;
int main()
{
string a;
string b="宝马";
cout<<"输入"<<endl;
cin>>a;
string::size_type idx;

idx=a.find(b);//在a中查找b.
if(idx == string::npos )//不存在。
cout << "没有\n";
else//存在。
cout <<"有\n";
cin.get();
cin.get();
}

这个是只能查一个,但我有很多词
#include <string.h>  
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
using std::string;
int main()
{
ifstream fin("C:\\Users\\Administrator\\Desktop\\1.93\\NEE.txt");
char n[20],name[20];
cout <<"name=? ";
cin >>n;
fin.getline(name,19);
bool find=0;
while(!(find=strcmp(name,n)==0) && !fin.eof())
{
fin.getline(name,19);
}
if(find)
cout <<"yes\n";
else
cout <<"no\n";
fin.close();
cin.get();
cin.get();
}

这个是得完全匹配,我输入 我有一个西瓜的话没办法匹配,只能输入西瓜,才能够匹配,
求各路大神支招,实在是头疼头疼的
能直接贴个完整的更好呀更好呀
...全文
154 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Italink 2019-05-19
  • 打赏
  • 举报
回复
引用 4 楼 穿袜子的猫和穿靴子的狗 的回复:
大恩不言谢,大哥我这点分都给你!

这个是用库实现的,关键字少,输入的话短,没什么问题,一多的话,效率极低!就需要自己写算法优化,而不要用库函数中的find
  • 打赏
  • 举报
回复
引用 3 楼 Italink 的回复:
改一下返回值

#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
string findstr(vector<string>& words, string& key) {
	for (int i = 0; i < words.size(); ++i)        //反过来在你输入的这句话中看有没有文本的词出现过
		if (key.find(words[i]) != string::npos)
			return words[i];
	return string();
}
int main() {
	ifstream in("in.txt");
	vector<string> words;
	string str;
	while (!in.eof()) {
		getline(in, str);
		words.push_back(str);
	}
	in.close();        //先把所有词存起来,不要每次都去读文件
	while (true) {
		cout << "输入一段话:";
		cin >> str;
		cout << findstr(words, str) << endl;
	}
	return 0;
}
大恩不言谢,大哥我这点分都给你!
Italink 2019-05-19
  • 打赏
  • 举报
回复
改一下返回值

#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
string findstr(vector<string>& words, string& key) {
for (int i = 0; i < words.size(); ++i) //反过来在你输入的这句话中看有没有文本的词出现过
if (key.find(words[i]) != string::npos)
return words[i];
return string();
}
int main() {
ifstream in("in.txt");
vector<string> words;
string str;
while (!in.eof()) {
getline(in, str);
words.push_back(str);
}
in.close(); //先把所有词存起来,不要每次都去读文件
while (true) {
cout << "输入一段话:";
cin >> str;
cout << findstr(words, str) << endl;
}
return 0;
}
  • 打赏
  • 举报
回复
引用 1 楼 Italink 的回复:
是这个意思吗

#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
bool findstr(vector<string>& words, string& key) {
	for (int i = 0; i < words.size(); ++i)		//反过来在你输入的这句话中看有没有文本的词出现过
		if (key.find(words[i]) != string::npos)
			return true;	
	return false;
}
int main() {
	ifstream in("in.txt");
	vector<string> words;
	string str;
	while (!in.eof()) {
		getline(in, str);
		words.push_back(str);
	}
	in.close();		//先把所有词存起来,不要每次都去读文件
	while (true) {
		cout << "输入一段话:";
		cin >> str;
		cout << (findstr(words, str) ? "yes" : "no") << endl;
	}
	return 0;
}

厉害大哥!!大哥太厉害了卧槽我激动了!还有一个小问题就是,能不能返回查询的,就是说 我搜索一个西瓜,如果有,就返回一个西瓜,如果没有 就不返回
Italink 2019-05-19
  • 打赏
  • 举报
回复
是这个意思吗

#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
bool findstr(vector<string>& words, string& key) {
for (int i = 0; i < words.size(); ++i) //反过来在你输入的这句话中看有没有文本的词出现过
if (key.find(words[i]) != string::npos)
return true;
return false;
}
int main() {
ifstream in("in.txt");
vector<string> words;
string str;
while (!in.eof()) {
getline(in, str);
words.push_back(str);
}
in.close(); //先把所有词存起来,不要每次都去读文件
while (true) {
cout << "输入一段话:";
cin >> str;
cout << (findstr(words, str) ? "yes" : "no") << endl;
}
return 0;
}

Italink 2019-05-19
  • 打赏
  • 举报
回复
引用 9 楼 穿袜子的猫和穿靴子的狗 的回复:
引用 7 楼 Italink 的回复:
200万行太多了,不可能全部读到内存中,用一个文本实现很困难,这个可以构建搜索树或者哈希表来处理,显然原来的代码不能用了
大哥我又开了贴
刚睡醒
  • 打赏
  • 举报
回复
引用 7 楼 Italink 的回复:
200万行太多了,不可能全部读到内存中,用一个文本实现很困难,这个可以构建搜索树或者哈希表来处理,显然原来的代码不能用了
大哥我又开了贴
  • 打赏
  • 举报
回复
引用 7 楼 Italink 的回复:
200万行太多了,不可能全部读到内存中,用一个文本实现很困难,这个可以构建搜索树或者哈希表来处理,显然原来的代码不能用了
哎。。已经超出我的能力范围了,多谢大哥解答,
Italink 2019-05-19
  • 打赏
  • 举报
回复
200万行太多了,不可能全部读到内存中,用一个文本实现很困难,这个可以构建搜索树或者哈希表来处理,显然原来的代码不能用了
  • 打赏
  • 举报
回复
引用 5 楼 Italink 的回复:
[quote=引用 4 楼 穿袜子的猫和穿靴子的狗 的回复:] 大恩不言谢,大哥我这点分都给你!
这个是用库实现的,关键字少,输入的话短,没什么问题,一多的话,效率极低!就需要自己写算法优化,而不要用库函数中的find[/quote] 大哥大哥,出现个新问题。。我的txt文档太多了,只能识别几十行,后边的二百万行识别不到呢。。

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧