如何从文件中搜索全名和有关某人的其他信息?
Posted
技术标签:
【中文标题】如何从文件中搜索全名和有关某人的其他信息?【英文标题】:How can I search for fullname and the rest of info about a person from a file? 【发布时间】:2022-01-24 00:02:57 【问题描述】:(= 我正在尝试构建一个简单的菜单程序,根据用户想要执行的操作添加数据、搜索数据和删除数据。 正如这里有人告诉我的那样,我在这里使用了 Struct,也有人告诉我使用向量来使自己更容易。我做了两种方式,但是,我不知道为什么它根本不起作用! 它会在文件中打印第一个人的全名,但我怎样才能做到这一点,以便代码在我将人的全名写入控制台时打印所有信息。
这是我的搜索功能代码。
while (std::getline(in_out_file, lines))
my_vec.push_back(lines);
for(int i = 0;i < my_vec.size(); ++i)
if(search == my_vec[i])
std::cout << search << std::endl;
std::cout << "Match found" << std::endl;
break;
// std::cout << "\n\tThe fullname is : " << info.full_name;
// std::cout << "\n\tThe address is : " << info.address;
// std::cout << "\n\tThe E-post is : " << info.e_post;
// std::cout << "\n\tThe number is : " << info.phone_num;
// std::cout << "\n\tThe birthday is : " << info.birth_date;
// std::cout << "\n\tAnything else : " << info.anything_else;
else
std::cout << "Match not found "<< std::endl;
break;
in_out_file.close();
return 0;
【问题讨论】:
您需要删除 else 子句中的break;
否则您的 for 循环将在第一次迭代时停止
嗨琼!如果我删除它,它将重复打印匹配未找到大约 20 次。
找到匹配项后,不清楚您想做什么。
不清楚您要做什么。您可能希望将文件加载到记录向量中,然后搜索不同的键。注意"Tom Cruise"
、"Cruise Tom"
、" Tom Cruise"
是一样的。
其余信息?这是否意味着您要取消注释这些行:// std::cout << "\n\tThe fullname is : " << info.full_name; // std::cout << "\n\tThe address is : " << info.address; // std::cout << "\n\tThe E-post is : " << info.e_post; // std::cout << "\n\tThe number is : " << info.phone_num; // std::cout << "\n\tThe birthday is : " << info.birth_date; // std::cout << "\n\tAnything else : " << info.anything_else;
【参考方案1】:
您好,这是一个工作示例。程序的健壮性取决于您如何检查行内容与用户搜索模式。 在这里,我删除了搜索模式中的所有空格以进行匹配。
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
#include <iomanip>
#include <fstream>
#include <map>
using namespace std;
std::string embedded_test_file = R"(Tom Cruise
Los Angelse Manchester Street 234 1223
tom@gmail.com
0354221112
23 July
Mission Accomplished
Jordan Jordansson
Georga computerStreet 12 34567
jordan@gmail.com
032456789
20 January
My new book is coming soon)";
struct searching_contact
std::string full_name"";
std::string address"";
std::string e_post"";
std::string phone_num"";
std::string birth_date"";
std::string anything_else"";
std::string new_line"";
;
string remove_white_space(const string &var)
string res;
for (const auto &c:var)
if (c != ' ') res.push_back(c);
return res;
int search_contact()
searching_contact info;
std::stringstream in_out_fileembedded_test_file;
std::string search;
std::vector<std::string> lines;
bool found = false;
std::cout << "Enter Key to search: ";
std::getline(std::cin, search);
std::string line;
while (std::getline(in_out_file, line))
lines.push_back(line);
auto search_no_space = remove_white_space(search);
for (int i = 0; i < lines.size(); ++i)
cout << "searching: "<< search <<" in <" <<lines[i] <<">" << endl;
auto line_no_space = remove_white_space(lines[i]);
if (search_no_space.compare(line_no_space) == 0)
std::cout << "Match found" << std::endl;
info.full_name = lines[i];
i++;
info.address = lines[i];
i++;
info.e_post = lines[i];
i++;
info.phone_num = lines[i];
i++;
info.birth_date = lines[i];
i++;
info.anything_else = lines[i];
i++;
info.new_line = lines[i];
i++;
found = true;
break;
return found == true ? 0 : -1;
int main(void)
return search_contact();
【讨论】:
感谢 Jean-Marc (= 它不起作用。 onlinegdb.com/vcXpCt5-T 链接显示我所做的更改! 还是不行,努力让它工作,祝我好运(= 你认为这有帮助吗以上是关于如何从文件中搜索全名和有关某人的其他信息?的主要内容,如果未能解决你的问题,请参考以下文章
如何设置日期的搜索条件,从数据库中检索该日期的其他详细信息?