如何从文件中搜索全名和有关某人的其他信息?

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 &lt;&lt; "\n\tThe fullname is : " &lt;&lt; info.full_name; // std::cout &lt;&lt; "\n\tThe address is : " &lt;&lt; info.address; // std::cout &lt;&lt; "\n\tThe E-post is : " &lt;&lt; info.e_post; // std::cout &lt;&lt; "\n\tThe number is : " &lt;&lt; info.phone_num; // std::cout &lt;&lt; "\n\tThe birthday is : " &lt;&lt; info.birth_date; // std::cout &lt;&lt; "\n\tAnything else : " &lt;&lt; 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 链接显示我所做的更改! 还是不行,努力让它工作,祝我好运(= 你认为这有帮助吗

以上是关于如何从文件中搜索全名和有关某人的其他信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置日期的搜索条件,从数据库中检索该日期的其他详细信息?

如何从推荐URL获取推荐的用户详细信息?

搜索引擎分类和基础架构概述

如何从Microsoft Office文档中完全删除那些暴露你身份的元数据?

从 CVS 检出文件中获取有关 CVS 服务器的信息

如何在 c# 中分配后保留有关对象的信息?