【问题标题】:Searching text file with prefix搜索带前缀的文本文件
【发布时间】:2016-11-28 22:39:22
【问题描述】:

我有一个文本文件,每行都有一个名称/位置。是否有一种简单的方法可以根据用户输入的前缀搜索文本文件并打印以该前缀开头的每一行。

【问题讨论】:

  • 请定义简单

标签: c++ search text-files


【解决方案1】:

基本上,您应该遍历文件的每一行并检查其内容。这可以通过 ifstream 来完成,如下所示:

ifstream file("text.txt");
if (file.is_open())
{
    string line;
    while (std::getline(file, line))
    {
        // match
    }
}

匹配项目的实际方法取决于前缀的复杂性。

对于简单的情况,您可以只使用字符串compare 方法。例如:

if (!line.compare(0, matchSize, matchPrefix))
{
    std::cout << line << std::endl;
}

string::find 并检查0 的结果。

如果匹配条件更复杂,您可以尝试使用regular expressions。但是,这取决于用户期望的前缀的实际格式。

您还应该考虑区分大小写是否存在问题,并使用std::transformtoupper/tolower 预处理比较的字符串,或者编写自己的谓词以与std::equal 一起使用。例如:

string prefix = "ab";
bool match = std::equal(prefix.begin(), prefix.end(), line.begin(), [](const char& c1, const char& c2)
{
    return tolower(c1) == tolower(c2);
});

如您所见,此类问题有很多解决方案(甚至更多)。采用哪一种取决于具体要求和用户输入的处理情况。

【讨论】:

  • "例如:" 死胡同?
  • 由于缺少关于用户可能实际输入的内容的信息,我考虑删除该部分,直到知道更多细节为止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
相关资源
最近更新 更多